
    //#line 128 "btParserTemplateF.gi

import 'package:lpg2/lpg2.dart';
import 'dart:io';
import 'snooperParserprs.dart';
import 'snooperParsersym.dart';

    //#line 7 "snooperParser.g

import 'Scope.dart';
import 'Symbol.dart';
import 'dart:typed_data';

    //#line 137 "btParserTemplateF.gi

class snooperParser extends Object implements RuleAction
{

    @override
    void ruleAction(int ruleNumber) {
           var act = _rule_action[ruleNumber];
            if(null != act){
                act(); 
            }
    }

    PrsStream prsStream = PrsStream();

    bool unimplementedSymbolsWarning = false;

    static  ParseTable prsTable  = snooperParserprs();
    ParseTable getParseTable()  { return snooperParser.prsTable; }

    late BacktrackingParser btParser;
    BacktrackingParser getParser(){ return btParser; }

    void setResult(Object? object1){ btParser.setSym1(object1); }
    Object? getRhsSym(int i){ return btParser.getSym(i); }

    int getRhsTokenIndex(int i)  { return btParser.getToken(i); }
    IToken getRhsIToken(int i)   { return prsStream.getIToken(getRhsTokenIndex(i)); }

    int getRhsFirstTokenIndex(int i)   { return btParser.getFirstToken(i); }
    IToken getRhsFirstIToken(int i)  { return prsStream.getIToken(getRhsFirstTokenIndex(i)); }

    int getRhsLastTokenIndex(int i)  { return btParser.getLastToken(i); }
    IToken getRhsLastIToken(int i)  { return prsStream.getIToken(getRhsLastTokenIndex(i)); }

    int getLeftSpan() { return btParser.getFirstToken(); }
    IToken getLeftIToken()   { return prsStream.getIToken(getLeftSpan()); }

    int getRightSpan() { return btParser.getLastToken(); }
    IToken getRightIToken() { return prsStream.getIToken(getRightSpan()); }

    int getRhsErrorTokenIndex(int i)  
    {
        var index = btParser.getToken(i);
        var err = prsStream.getIToken(index);
        return (err is ErrorToken ? index : 0);
    }
    ErrorToken? getRhsErrorIToken(int i)  
    {
        var index = btParser.getToken(i);
        var err = prsStream.getIToken(index);
        return err as ErrorToken?;
    }

    void  reset(ILexStream lexStream)   
    {
        prsStream.resetLexStream(lexStream);
        btParser.reset(prsStream);

        try
        {
            prsStream.remapTerminalSymbols(orderedTerminalSymbols(), snooperParser.prsTable.getEoftSymbol());
        } 
        on NullExportedSymbolsException{}
        on UnimplementedTerminalsException catch (e)
        {
            if (unimplementedSymbolsWarning) {
                var unimplemented_symbols = e.getSymbols();
                stdout.writeln("The Lexer will not scan the following token(s):");
                for (var i  = 0; i < unimplemented_symbols!.size(); i++)
                {
                    int id = unimplemented_symbols.get(i);
                    stdout.writeln("    " + snooperParsersym.orderedTerminalSymbols[id]);               
                }
                stdout.writeln();
            }
        }
        on UndefinedEofSymbolException catch (e)
        {
            throw (UndefinedEofSymbolException
                ("The Lexer does not implement the Eof symbol " +
                snooperParsersym.orderedTerminalSymbols[snooperParser.prsTable.getEoftSymbol()]));
        }

    }
    List<dynamic?> _rule_action = List.filled(240 + 2, null);
    snooperParser([ILexStream? lexStream])
    {
        initRuleAction();
        try
        {
            btParser = BacktrackingParser(null, snooperParser.prsTable, this);
        }
        on  NotBacktrackParseTableException
        {
            throw (NotBacktrackParseTableException
                ("Regenerate snooperParserprs.dart with -BACKTRACK option"));
        }
        on BadParseSymFileException
        {
            throw (BadParseSymFileException("Bad Parser Symbol File -- snooperParsersym.dart"));
        }

        if(lexStream != null){
          reset(lexStream);
        }
    }
    
   
    
    int numTokenKinds(){ return snooperParsersym.numTokenKinds; }
    List<String>  orderedTerminalSymbols()  { return snooperParsersym.orderedTerminalSymbols; }
    String  getTokenKindName(int kind)   { return snooperParsersym.orderedTerminalSymbols[kind]; }
    int  getEOFTokenKind() { return snooperParser.prsTable.getEoftSymbol(); }
    IPrsStream getIPrsStream(){ return prsStream; }


    IAst? parser([int error_repair_count = 0 ,Monitor?  monitor])
    {
        btParser.setMonitor(monitor);
        
        try{
            return btParser.fuzzyParse(error_repair_count) as IAst?;
        }
        on BadParseException catch(e){
            prsStream.reset(e.error_token); // point to error token
            var diagnoseParser = DiagnoseParser(prsStream, snooperParser.prsTable);
            diagnoseParser.diagnose(e.error_token);
        }
        return null;
    }

    //
    // Additional entry points, if any
    //
    

    //#line 505 "snooperParser.g



    //#line 277 "btParserTemplateF.gi

    void initRuleAction(){


            //
            // Rule 1:  SnooperProg ::= %Empty
            //
             _rule_action[1]=(){
               //#line 81 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 2:  SnooperProg ::= SnooperSegments
            //
             _rule_action[2]=(){
               //#line 83 "snooperParser.g"
                setResult(
                    //#line 83 snooperParser.g
                    SnooperProg(this, getLeftIToken(), getRightIToken(),
                                //#line 83 snooperParser.g
                                getRhsSym(1) as SnooperSegmentItemList)
                //#line 83 snooperParser.g
                );
            
            };
            //
            // Rule 3:  SnooperSegments ::= SnooperSegmentItem
            //
             _rule_action[3]=(){
               //#line 89 "snooperParser.g"
                setResult(
                    //#line 89 snooperParser.g
                    SnooperSegmentItemList.SnooperSegmentItemListfromElement(getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 89 snooperParser.g
                );
            
            };
            //
            // Rule 4:  SnooperSegments ::= SnooperSegments SnooperSegmentItem
            //
             _rule_action[4]=(){
               //#line 89 "snooperParser.g"
                (getRhsSym(1) as SnooperSegmentItemList).addElement(getRhsSym(2)as ASTNode);
            
            };
            //
            // Rule 5:  SnooperSegmentItem ::= Statement
            //
            
                 
            //
            // Rule 6:  SnooperSegmentItem ::= FunctionDecl
            //
            
                 
            //
            // Rule 7:  ReturnStmt ::= return ExpressionOpt CRLF
            //
             _rule_action[7]=(){
               //#line 96 "snooperParser.g"
                setResult(
                    //#line 96 snooperParser.g
                    ReturnStmt(getLeftIToken(), getRightIToken(),
                               //#line 96 snooperParser.g
                               ASTNodeToken(getRhsIToken(1)),
                               //#line 96 snooperParser.g
                               getRhsSym(2) as ASTNode?,
                               //#line 96 snooperParser.g
                               ASTNodeToken(getRhsIToken(3)))
                //#line 96 snooperParser.g
                );
            
            };
            //
            // Rule 8:  SimpleNameOpt ::= %Empty
            //
             _rule_action[8]=(){
               //#line 98 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 9:  SimpleNameOpt ::= SimpleName
            //
            
                 
            //
            // Rule 10:  SimpleName ::= IDENTIFIER
            //
             _rule_action[10]=(){
               //#line 100 "snooperParser.g"
                setResult(
                    //#line 100 snooperParser.g
                    SimpleName(getRhsIToken(1))
                //#line 100 snooperParser.g
                );
            
            };
            //
            // Rule 11:  FunctionParameterList ::= SimpleName
            //
             _rule_action[11]=(){
               //#line 102 "snooperParser.g"
                setResult(
                    //#line 102 snooperParser.g
                    SimpleNameList.SimpleNameListfromElement(getRhsSym(1) as SimpleName, true /* left recursive */)
                //#line 102 snooperParser.g
                );
            
            };
            //
            // Rule 12:  FunctionParameterList ::= FunctionParameterList , SimpleName
            //
             _rule_action[12]=(){
               //#line 102 "snooperParser.g"
                (getRhsSym(1) as SimpleNameList).addElement(getRhsSym(3)as ASTNode);
            
            };
            //
            // Rule 13:  FunctionParameterListOpt ::= %Empty
            //
             _rule_action[13]=(){
               //#line 104 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 14:  FunctionParameterListOpt ::= FunctionParameterList
            //
            
                 
            //
            // Rule 15:  CallSignature ::= ( FunctionParameterListOpt )
            //
             _rule_action[15]=(){
               //#line 106 "snooperParser.g"
                setResult(
                    //#line 106 snooperParser.g
                    CallSignature(getLeftIToken(), getRightIToken(),
                                  //#line 106 snooperParser.g
                                  ASTNodeToken(getRhsIToken(1)),
                                  //#line 106 snooperParser.g
                                  getRhsSym(2) as SimpleNameList?,
                                  //#line 106 snooperParser.g
                                  ASTNodeToken(getRhsIToken(3)))
                //#line 106 snooperParser.g
                );
            
            };
            //
            // Rule 16:  CallSignatureOpt ::= %Empty
            //
             _rule_action[16]=(){
               //#line 107 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 17:  CallSignatureOpt ::= CallSignature
            //
            
                 
            //
            // Rule 18:  FunctionDecl ::= IDENTIFIER CallSignatureOpt : CRLF BlockOpt ReturnStmt
            //
             _rule_action[18]=(){
               //#line 109 "snooperParser.g"
                setResult(
                    //#line 109 snooperParser.g
                    FunctionDecl(this, getLeftIToken(), getRightIToken(),
                                 //#line 109 snooperParser.g
                                 ASTNodeToken(getRhsIToken(1)),
                                 //#line 109 snooperParser.g
                                 getRhsSym(2) as CallSignature?,
                                 //#line 109 snooperParser.g
                                 ASTNodeToken(getRhsIToken(3)),
                                 //#line 109 snooperParser.g
                                 ASTNodeToken(getRhsIToken(4)),
                                 //#line 109 snooperParser.g
                                 getRhsSym(5) as StatementList?,
                                 //#line 109 snooperParser.g
                                 getRhsSym(6) as ReturnStmt)
                //#line 109 snooperParser.g
                );
            
            };
            //
            // Rule 19:  StatementList ::= Statement
            //
             _rule_action[19]=(){
               //#line 118 "snooperParser.g"
                setResult(
                    //#line 118 snooperParser.g
                    StatementList_StatementList.StatementList_StatementListfromElement(this, getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 118 snooperParser.g
                );
            
            };
            //
            // Rule 20:  StatementList ::= StatementList Statement
            //
             _rule_action[20]=(){
               //#line 119 "snooperParser.g"
                (getRhsSym(1) as StatementList_StatementList).addElement(getRhsSym(2)as ASTNode);
            
            };
            //
            // Rule 21:  Statement ::= StatementWithoutTrailingSubstatement
            //
            
                 
            //
            // Rule 22:  Statement ::= IfThenStatement
            //
            
                 
            //
            // Rule 23:  Statement ::= IfThenElseStatement
            //
            
                 
            //
            // Rule 24:  Statement ::= DoLoopStmt
            //
            
                 
            //
            // Rule 25:  Statement ::= ForStmt
            //
            
                 
            //
            // Rule 26:  Statement ::= HforStmt
            //
            
                 
            //
            // Rule 27:  StatementWithoutTrailingSubstatement ::= ExitStatement
            //
            
                 
            //
            // Rule 28:  StatementWithoutTrailingSubstatement ::= VariableStmt
            //
            
                 
            //
            // Rule 29:  StatementWithoutTrailingSubstatement ::= ExpressionStmt
            //
            
                 
            //
            // Rule 30:  StatementWithoutTrailingSubstatement ::= LoadScriptStmt
            //
            
                 
            //
            // Rule 31:  StatementWithoutTrailingSubstatement ::= KeyWordWithoutParameterStmt
            //
            
                 
            //
            // Rule 32:  StatementWithoutTrailingSubstatement ::= SleepStmt
            //
            
                 
            //
            // Rule 33:  StatementWithoutTrailingSubstatement ::= SetStmt
            //
            
                 
            //
            // Rule 34:  StatementWithoutTrailingSubstatement ::= PrintStmt
            //
            
                 
            //
            // Rule 35:  StatementWithoutTrailingSubstatement ::= AutoResponseStmt
            //
            
                 
            //
            // Rule 36:  StatementWithoutTrailingSubstatement ::= WriteFifoStmt
            //
            
                 
            //
            // Rule 37:  StatementWithoutTrailingSubstatement ::= UploadStmt
            //
            
                 
            //
            // Rule 38:  StatementWithoutTrailingSubstatement ::= ResetStmt
            //
            
                 
            //
            // Rule 39:  StatementWithoutTrailingSubstatement ::= InstallStmt
            //
            
                 
            //
            // Rule 40:  StatementWithoutTrailingSubstatement ::= JcopAuthStmt
            //
            
                 
            //
            // Rule 41:  StatementWithoutTrailingSubstatement ::= SelectStmt
            //
            
                 
            //
            // Rule 42:  StatementWithoutTrailingSubstatement ::= DeleteStmt
            //
            
                 
            //
            // Rule 43:  StatementWithoutTrailingSubstatement ::= Apdu2Stmt
            //
            
                 
            //
            // Rule 44:  StatementWithoutTrailingSubstatement ::= PromptStmt
            //
            
                 
            //
            // Rule 45:  StatementWithoutTrailingSubstatement ::= ShowapduStmt
            //
            
                 
            //
            // Rule 46:  StatementWithoutTrailingSubstatement ::= Des_3des_mac_Stmt
            //
            
                 
            //
            // Rule 47:  StatementWithoutTrailingSubstatement ::= Full_3des_mac_Stmt
            //
            
                 
            //
            // Rule 48:  StatementWithoutTrailingSubstatement ::= Mac_auto_mac_Stmt
            //
            
                 
            //
            // Rule 49:  StatementWithoutTrailingSubstatement ::= SuperlongStmt
            //
            
                 
            //
            // Rule 50:  StatementWithoutTrailingSubstatement ::= CompareStmt
            //
            
                 
            //
            // Rule 51:  StatementWithoutTrailingSubstatement ::= Socket_messageStmt
            //
            
                 
            //
            // Rule 52:  StatementWithoutTrailingSubstatement ::= GenerateStmt
            //
            
                 
            //
            // Rule 53:  StatementWithoutTrailingSubstatement ::= SendtextStmt
            //
            
                 
            //
            // Rule 54:  StatementWithoutTrailingSubstatement ::= PushStmt
            //
            
                 
            //
            // Rule 55:  StatementWithoutTrailingSubstatement ::= GotoStmt
            //
            
                 
            //
            // Rule 56:  StatementWithoutTrailingSubstatement ::= EmptyStatement
            //
            
                 
            //
            // Rule 57:  IfSeg ::= if Expression CRLF BlockOpt
            //
             _rule_action[57]=(){
               //#line 167 "snooperParser.g"
                setResult(
                    //#line 167 snooperParser.g
                    IfSeg(getLeftIToken(), getRightIToken(),
                          //#line 167 snooperParser.g
                          ASTNodeToken(getRhsIToken(1)),
                          //#line 167 snooperParser.g
                          getRhsSym(2) as ASTNode,
                          //#line 167 snooperParser.g
                          ASTNodeToken(getRhsIToken(3)),
                          //#line 167 snooperParser.g
                          getRhsSym(4) as StatementList?)
                //#line 167 snooperParser.g
                );
            
            };
            //
            // Rule 58:  IfThenStatement ::= IfSeg ElseIfStatementOpt endif CRLF
            //
             _rule_action[58]=(){
               //#line 168 "snooperParser.g"
                setResult(
                    //#line 168 snooperParser.g
                    IfThenStatement(getLeftIToken(), getRightIToken(),
                                    //#line 168 snooperParser.g
                                    getRhsSym(1) as IfSeg,
                                    //#line 168 snooperParser.g
                                    getRhsSym(2) as ElseIfStatementItemList?,
                                    //#line 168 snooperParser.g
                                    ASTNodeToken(getRhsIToken(3)),
                                    //#line 168 snooperParser.g
                                    ASTNodeToken(getRhsIToken(4)))
                //#line 168 snooperParser.g
                );
            
            };
            //
            // Rule 59:  ElseSeg ::= else CRLF BlockOpt
            //
             _rule_action[59]=(){
               //#line 170 "snooperParser.g"
                setResult(
                    //#line 170 snooperParser.g
                    ElseSeg(getLeftIToken(), getRightIToken(),
                            //#line 170 snooperParser.g
                            ASTNodeToken(getRhsIToken(1)),
                            //#line 170 snooperParser.g
                            ASTNodeToken(getRhsIToken(2)),
                            //#line 170 snooperParser.g
                            getRhsSym(3) as StatementList?)
                //#line 170 snooperParser.g
                );
            
            };
            //
            // Rule 60:  IfThenElseStatement ::= IfSeg ElseIfStatementOpt ElseSeg endif CRLF
            //
             _rule_action[60]=(){
               //#line 171 "snooperParser.g"
                setResult(
                    //#line 171 snooperParser.g
                    IfThenElseStatement(getLeftIToken(), getRightIToken(),
                                        //#line 171 snooperParser.g
                                        getRhsSym(1) as IfSeg,
                                        //#line 171 snooperParser.g
                                        getRhsSym(2) as ElseIfStatementItemList?,
                                        //#line 171 snooperParser.g
                                        getRhsSym(3) as ElseSeg,
                                        //#line 171 snooperParser.g
                                        ASTNodeToken(getRhsIToken(4)),
                                        //#line 171 snooperParser.g
                                        ASTNodeToken(getRhsIToken(5)))
                //#line 171 snooperParser.g
                );
            
            };
            //
            // Rule 61:  ElseIfStatementOpt ::= %Empty
            //
             _rule_action[61]=(){
               //#line 173 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 62:  ElseIfStatementOpt ::= ElseIfStatementList
            //
            
                 
            //
            // Rule 63:  ElseIfStatementList ::= ElseIfStatementItem
            //
             _rule_action[63]=(){
               //#line 175 "snooperParser.g"
                setResult(
                    //#line 175 snooperParser.g
                    ElseIfStatementItemList.ElseIfStatementItemListfromElement(getRhsSym(1) as ElseIfStatementItem, true /* left recursive */)
                //#line 175 snooperParser.g
                );
            
            };
            //
            // Rule 64:  ElseIfStatementList ::= ElseIfStatementList ElseIfStatementItem
            //
             _rule_action[64]=(){
               //#line 175 "snooperParser.g"
                (getRhsSym(1) as ElseIfStatementItemList).addElement(getRhsSym(2)as ASTNode);
            
            };
            //
            // Rule 65:  ElseIfStatementItem ::= else if Expression CRLF BlockOpt
            //
             _rule_action[65]=(){
               //#line 177 "snooperParser.g"
                setResult(
                    //#line 177 snooperParser.g
                    ElseIfStatementItem(getLeftIToken(), getRightIToken(),
                                        //#line 177 snooperParser.g
                                        ASTNodeToken(getRhsIToken(1)),
                                        //#line 177 snooperParser.g
                                        ASTNodeToken(getRhsIToken(2)),
                                        //#line 177 snooperParser.g
                                        getRhsSym(3) as ASTNode,
                                        //#line 177 snooperParser.g
                                        ASTNodeToken(getRhsIToken(4)),
                                        //#line 177 snooperParser.g
                                        getRhsSym(5) as StatementList?)
                //#line 177 snooperParser.g
                );
            
            };
            //
            // Rule 66:  EmptyStatement ::= CRLF
            //
             _rule_action[66]=(){
               //#line 179 "snooperParser.g"
                setResult(
                    //#line 179 snooperParser.g
                    EmptyStatement0(getRhsIToken(1))
                //#line 179 snooperParser.g
                );
            
            };
            //
            // Rule 67:  EmptyStatement ::= ;
            //
             _rule_action[67]=(){
               //#line 179 "snooperParser.g"
                setResult(
                    //#line 179 snooperParser.g
                    EmptyStatement1(getRhsIToken(1))
                //#line 179 snooperParser.g
                );
            
            };
            //
            // Rule 68:  Variable ::= MACRO_IDENTIFIER
            //
             _rule_action[68]=(){
               //#line 182 "snooperParser.g"
                setResult(
                    //#line 182 snooperParser.g
                    Variable(this, getRhsIToken(1))
                //#line 182 snooperParser.g
                );
            
            };
            //
            // Rule 69:  Variable ::= DollarSign IDENTIFIER
            //
             _rule_action[69]=(){
               //#line 187 "snooperParser.g"
                setResult(
                    //#line 187 snooperParser.g
                    BadVariable(this, getLeftIToken(), getRightIToken(),
                                //#line 187 snooperParser.g
                                ASTNodeToken(getRhsIToken(1)),
                                //#line 187 snooperParser.g
                                ASTNodeToken(getRhsIToken(2)))
                //#line 187 snooperParser.g
                );
            
            };
            //
            // Rule 70:  BlockOpt ::= %Empty
            //
             _rule_action[70]=(){
               //#line 191 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 71:  BlockOpt ::= StatementList
            //
            
                 
            //
            // Rule 72:  LetOpt ::= %Empty
            //
             _rule_action[72]=(){
               //#line 193 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 73:  LetOpt ::= let
            //
             _rule_action[73]=(){
               //#line 193 "snooperParser.g"
                setResult(
                    //#line 193 snooperParser.g
                    LetOpt(getRhsIToken(1))
                //#line 193 snooperParser.g
                );
            
            };
            //
            // Rule 74:  VariableStmt ::= LetOpt VariableDecl CRLF
            //
             _rule_action[74]=(){
               //#line 195 "snooperParser.g"
                setResult(
                    //#line 195 snooperParser.g
                    VariableStmt(getLeftIToken(), getRightIToken(),
                                 //#line 195 snooperParser.g
                                 getRhsSym(1) as LetOpt?,
                                 //#line 195 snooperParser.g
                                 getRhsSym(2) as ASTNode,
                                 //#line 195 snooperParser.g
                                 ASTNodeToken(getRhsIToken(3)))
                //#line 195 snooperParser.g
                );
            
            };
            //
            // Rule 75:  PrimaryAssignmentStmt ::= IDENTIFIER = Expression
            //
             _rule_action[75]=(){
               //#line 197 "snooperParser.g"
                setResult(
                    //#line 197 snooperParser.g
                    PrimaryAssignmentStmt(this, getLeftIToken(), getRightIToken(),
                                          //#line 197 snooperParser.g
                                          ASTNodeToken(getRhsIToken(1)),
                                          //#line 197 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 197 snooperParser.g
                                          getRhsSym(3) as ASTNode)
                //#line 197 snooperParser.g
                );
            
            };
            //
            // Rule 76:  VariableDecl ::= PrimaryAssignmentStmt
            //
            
                 
            //
            // Rule 77:  ArrayAccesOnLeftSide ::= IDENTIFIER [ Expression ]
            //
             _rule_action[77]=(){
               //#line 205 "snooperParser.g"
                setResult(
                    //#line 205 snooperParser.g
                    ArrayAccesOnLeftSide(getLeftIToken(), getRightIToken(),
                                         //#line 205 snooperParser.g
                                         ASTNodeToken(getRhsIToken(1)),
                                         //#line 205 snooperParser.g
                                         ASTNodeToken(getRhsIToken(2)),
                                         //#line 205 snooperParser.g
                                         getRhsSym(3) as ASTNode,
                                         //#line 205 snooperParser.g
                                         ASTNodeToken(getRhsIToken(4)))
                //#line 205 snooperParser.g
                );
            
            };
            //
            // Rule 78:  ArrayAccessAssignmentStmt ::= ArrayAccesOnLeftSide = Expression
            //
             _rule_action[78]=(){
               //#line 207 "snooperParser.g"
                setResult(
                    //#line 207 snooperParser.g
                    ArrayAccessAssignmentStmt(this, getLeftIToken(), getRightIToken(),
                                              //#line 207 snooperParser.g
                                              getRhsSym(1) as ArrayAccesOnLeftSide,
                                              //#line 207 snooperParser.g
                                              ASTNodeToken(getRhsIToken(2)),
                                              //#line 207 snooperParser.g
                                              getRhsSym(3) as ASTNode)
                //#line 207 snooperParser.g
                );
            
            };
            //
            // Rule 79:  VariableDecl ::= ArrayAccessAssignmentStmt
            //
            
                 
            //
            // Rule 80:  VariableDecl ::= sw = Expression
            //
             _rule_action[80]=(){
               //#line 213 "snooperParser.g"
                setResult(
                    //#line 213 snooperParser.g
                    KeywordAssignmentStmt(this, getLeftIToken(), getRightIToken(),
                                          //#line 213 snooperParser.g
                                          ASTNodeToken(getRhsIToken(1)),
                                          //#line 213 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 213 snooperParser.g
                                          getRhsSym(3) as ASTNode)
                //#line 213 snooperParser.g
                );
            
            };
            //
            // Rule 81:  VariableDecl ::= IDENTIFIER =
            //
             _rule_action[81]=(){
               //#line 217 "snooperParser.g"
                setResult(
                    //#line 217 snooperParser.g
                    BadAssignment(this, getLeftIToken(), getRightIToken(),
                                  //#line 217 snooperParser.g
                                  ASTNodeToken(getRhsIToken(1)),
                                  //#line 217 snooperParser.g
                                  ASTNodeToken(getRhsIToken(2)))
                //#line 217 snooperParser.g
                );
            
            };
            //
            // Rule 82:  DoLoopStmt ::= do ExpressionOpt CRLF BlockOpt loop
            //
             _rule_action[82]=(){
               //#line 222 "snooperParser.g"
                setResult(
                    //#line 222 snooperParser.g
                    DoLoopStmt(this, getLeftIToken(), getRightIToken(),
                               //#line 222 snooperParser.g
                               ASTNodeToken(getRhsIToken(1)),
                               //#line 222 snooperParser.g
                               getRhsSym(2) as ASTNode?,
                               //#line 222 snooperParser.g
                               ASTNodeToken(getRhsIToken(3)),
                               //#line 222 snooperParser.g
                               getRhsSym(4) as StatementList?,
                               //#line 222 snooperParser.g
                               ASTNodeToken(getRhsIToken(5)))
                //#line 222 snooperParser.g
                );
            
            };
            //
            // Rule 83:  StepStmOpt ::= %Empty
            //
             _rule_action[83]=(){
               //#line 227 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 84:  StepStmOpt ::= step Expression
            //
             _rule_action[84]=(){
               //#line 227 "snooperParser.g"
                setResult(
                    //#line 227 snooperParser.g
                    StepStmOpt(getLeftIToken(), getRightIToken(),
                               //#line 227 snooperParser.g
                               ASTNodeToken(getRhsIToken(1)),
                               //#line 227 snooperParser.g
                               getRhsSym(2) as ASTNode)
                //#line 227 snooperParser.g
                );
            
            };
            //
            // Rule 85:  NextSegItem ::= NumberLiteral
            //
            
                 
            //
            // Rule 86:  NextSegItem ::= SimpleName
            //
            
                 
            //
            // Rule 87:  ForStmt ::= for VariableDecl to Primary StepStmOpt CRLF BlockOpt NextSeg
            //
             _rule_action[87]=(){
               //#line 231 "snooperParser.g"
                setResult(
                    //#line 231 snooperParser.g
                    ForStmt(this, getLeftIToken(), getRightIToken(),
                            //#line 231 snooperParser.g
                            ASTNodeToken(getRhsIToken(1)),
                            //#line 231 snooperParser.g
                            getRhsSym(2) as ASTNode,
                            //#line 231 snooperParser.g
                            ASTNodeToken(getRhsIToken(3)),
                            //#line 231 snooperParser.g
                            getRhsSym(4) as ASTNode,
                            //#line 231 snooperParser.g
                            getRhsSym(5) as StepStmOpt?,
                            //#line 231 snooperParser.g
                            ASTNodeToken(getRhsIToken(6)),
                            //#line 231 snooperParser.g
                            getRhsSym(7) as StatementList?,
                            //#line 231 snooperParser.g
                            getRhsSym(8) as NextSeg)
                //#line 231 snooperParser.g
                );
            
            };
            //
            // Rule 88:  NextSeg ::= next NextSegItem CRLF
            //
             _rule_action[88]=(){
               //#line 235 "snooperParser.g"
                setResult(
                    //#line 235 snooperParser.g
                    NextSeg(getLeftIToken(), getRightIToken(),
                            //#line 235 snooperParser.g
                            ASTNodeToken(getRhsIToken(1)),
                            //#line 235 snooperParser.g
                            getRhsSym(2) as ASTNode,
                            //#line 235 snooperParser.g
                            ASTNodeToken(getRhsIToken(3)))
                //#line 235 snooperParser.g
                );
            
            };
            //
            // Rule 89:  HforStmt ::= hfor VariableDecl to Primary StepStmOpt CRLF BlockOpt HnexSeg
            //
             _rule_action[89]=(){
               //#line 238 "snooperParser.g"
                setResult(
                    //#line 238 snooperParser.g
                    HforStmt(this, getLeftIToken(), getRightIToken(),
                             //#line 238 snooperParser.g
                             ASTNodeToken(getRhsIToken(1)),
                             //#line 238 snooperParser.g
                             getRhsSym(2) as ASTNode,
                             //#line 238 snooperParser.g
                             ASTNodeToken(getRhsIToken(3)),
                             //#line 238 snooperParser.g
                             getRhsSym(4) as ASTNode,
                             //#line 238 snooperParser.g
                             getRhsSym(5) as StepStmOpt?,
                             //#line 238 snooperParser.g
                             ASTNodeToken(getRhsIToken(6)),
                             //#line 238 snooperParser.g
                             getRhsSym(7) as StatementList?,
                             //#line 238 snooperParser.g
                             getRhsSym(8) as HnexSeg)
                //#line 238 snooperParser.g
                );
            
            };
            //
            // Rule 90:  HnexSeg ::= hnext NextSegItem CRLF
            //
             _rule_action[90]=(){
               //#line 243 "snooperParser.g"
                setResult(
                    //#line 243 snooperParser.g
                    HnexSeg(getLeftIToken(), getRightIToken(),
                            //#line 243 snooperParser.g
                            ASTNodeToken(getRhsIToken(1)),
                            //#line 243 snooperParser.g
                            getRhsSym(2) as ASTNode,
                            //#line 243 snooperParser.g
                            ASTNodeToken(getRhsIToken(3)))
                //#line 243 snooperParser.g
                );
            
            };
            //
            // Rule 91:  NumberLiteral ::= NUMBER
            //
             _rule_action[91]=(){
               //#line 246 "snooperParser.g"
                setResult(
                    //#line 246 snooperParser.g
                    NumberLiteral(this, getRhsIToken(1))
                //#line 246 snooperParser.g
                );
            
            };
            //
            // Rule 92:  StringLiteral ::= STRING_LITERAL
            //
             _rule_action[92]=(){
               //#line 251 "snooperParser.g"
                setResult(
                    //#line 251 snooperParser.g
                    StringLiteral(this, getRhsIToken(1))
                //#line 251 snooperParser.g
                );
            
            };
            //
            // Rule 93:  ArrayAccess ::= Variable [ Expression ]
            //
             _rule_action[93]=(){
               //#line 256 "snooperParser.g"
                setResult(
                    //#line 256 snooperParser.g
                    ArrayAccess(getLeftIToken(), getRightIToken(),
                                //#line 256 snooperParser.g
                                getRhsSym(1) as ASTNode,
                                //#line 256 snooperParser.g
                                ASTNodeToken(getRhsIToken(2)),
                                //#line 256 snooperParser.g
                                getRhsSym(3) as ASTNode,
                                //#line 256 snooperParser.g
                                ASTNodeToken(getRhsIToken(4)))
                //#line 256 snooperParser.g
                );
            
            };
            //
            // Rule 94:  Primary ::= HexMacroAbleItem
            //
            
                 
            //
            // Rule 95:  Primary ::= HEX_MACRO_PREFIX HexMacroAbleItem
            //
             _rule_action[95]=(){
               //#line 260 "snooperParser.g"
                setResult(
                    //#line 260 snooperParser.g
                    HexMacroPrimary(getLeftIToken(), getRightIToken(),
                                    //#line 260 snooperParser.g
                                    ASTNodeToken(getRhsIToken(1)),
                                    //#line 260 snooperParser.g
                                    getRhsSym(2) as ASTNode)
                //#line 260 snooperParser.g
                );
            
            };
            //
            // Rule 96:  Primary ::= FunctionCall
            //
            
                 
            //
            // Rule 97:  Primary ::= StringLiteral
            //
            
                 
            //
            // Rule 98:  HexMacroAbleItem ::= VariableAndSW
            //
            
                 
            //
            // Rule 99:  HexMacroAbleItem ::= NumberLiteral
            //
            
                 
            //
            // Rule 100:  HexMacroAbleItem ::= ArrayAccess
            //
            
                 
            //
            // Rule 101:  ApduData ::= { ApduDataList }
            //
             _rule_action[101]=(){
               //#line 269 "snooperParser.g"
                setResult(
                    //#line 269 snooperParser.g
                    ApduDataWith3Lc(getLeftIToken(), getRightIToken(),
                                    //#line 269 snooperParser.g
                                    ASTNodeToken(getRhsIToken(1)),
                                    //#line 269 snooperParser.g
                                    getRhsSym(2) as ApduDataList,
                                    //#line 269 snooperParser.g
                                    ASTNodeToken(getRhsIToken(3)))
                //#line 269 snooperParser.g
                );
            
            };
            //
            // Rule 102:  ApduData ::= ( ApduDataList )
            //
             _rule_action[102]=(){
               //#line 271 "snooperParser.g"
                setResult(
                    //#line 271 snooperParser.g
                    ApduDataWith2Lc(getLeftIToken(), getRightIToken(),
                                    //#line 271 snooperParser.g
                                    ASTNodeToken(getRhsIToken(1)),
                                    //#line 271 snooperParser.g
                                    getRhsSym(2) as ApduDataList,
                                    //#line 271 snooperParser.g
                                    ASTNodeToken(getRhsIToken(3)))
                //#line 271 snooperParser.g
                );
            
            };
            //
            // Rule 103:  ApduData ::= < ApduDataList >
            //
             _rule_action[103]=(){
               //#line 273 "snooperParser.g"
                setResult(
                    //#line 273 snooperParser.g
                    ApduDataWith4Lc(getLeftIToken(), getRightIToken(),
                                    //#line 273 snooperParser.g
                                    ASTNodeToken(getRhsIToken(1)),
                                    //#line 273 snooperParser.g
                                    getRhsSym(2) as ApduDataList,
                                    //#line 273 snooperParser.g
                                    ASTNodeToken(getRhsIToken(3)))
                //#line 273 snooperParser.g
                );
            
            };
            //
            // Rule 104:  ApduData ::= Primary
            //
             _rule_action[104]=(){
               //#line 275 "snooperParser.g"
                setResult(
                    //#line 275 snooperParser.g
                    ApduDataWithoutLc(getLeftIToken(), getRightIToken(),
                                      //#line 275 snooperParser.g
                                      getRhsSym(1) as ASTNode)
                //#line 275 snooperParser.g
                );
            
            };
            //
            // Rule 105:  ApduDataList ::= ApduData
            //
             _rule_action[105]=(){
               //#line 278 "snooperParser.g"
                setResult(
                    //#line 278 snooperParser.g
                    ApduDataList.ApduDataListfromElement(getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 278 snooperParser.g
                );
            
            };
            //
            // Rule 106:  ApduDataList ::= ApduDataList ApduData
            //
             _rule_action[106]=(){
               //#line 278 "snooperParser.g"
                (getRhsSym(1) as ApduDataList).addElement(getRhsSym(2)as ASTNode);
            
            };
            //
            // Rule 107:  PostfixExpression ::= ApduDataList
            //
            
                 
            //
            // Rule 108:  PostfixExpression ::= PostIncrementExpression
            //
            
                 
            //
            // Rule 109:  PostfixExpression ::= PostDecrementExpression
            //
            
                 
            //
            // Rule 110:  PostIncrementExpression ::= PostfixExpression ++
            //
             _rule_action[110]=(){
               //#line 284 "snooperParser.g"
                setResult(
                    //#line 284 snooperParser.g
                    PostIncrementExpression(getLeftIToken(), getRightIToken(),
                                            //#line 284 snooperParser.g
                                            getRhsSym(1) as ASTNode,
                                            //#line 284 snooperParser.g
                                            ASTNodeToken(getRhsIToken(2)))
                //#line 284 snooperParser.g
                );
            
            };
            //
            // Rule 111:  PostDecrementExpression ::= PostfixExpression --
            //
             _rule_action[111]=(){
               //#line 286 "snooperParser.g"
                setResult(
                    //#line 286 snooperParser.g
                    PostDecrementExpression(getLeftIToken(), getRightIToken(),
                                            //#line 286 snooperParser.g
                                            getRhsSym(1) as ASTNode,
                                            //#line 286 snooperParser.g
                                            ASTNodeToken(getRhsIToken(2)))
                //#line 286 snooperParser.g
                );
            
            };
            //
            // Rule 112:  UnaryExpression ::= PreIncrementExpression
            //
            
                 
            //
            // Rule 113:  UnaryExpression ::= PreDecrementExpression
            //
            
                 
            //
            // Rule 114:  UnaryExpression ::= UnaryExpressionNotPlusMinus
            //
            
                 
            //
            // Rule 115:  PreIncrementExpression ::= ++ UnaryExpression
            //
             _rule_action[115]=(){
               //#line 292 "snooperParser.g"
                setResult(
                    //#line 292 snooperParser.g
                    PreIncrementExpression(getLeftIToken(), getRightIToken(),
                                           //#line 292 snooperParser.g
                                           ASTNodeToken(getRhsIToken(1)),
                                           //#line 292 snooperParser.g
                                           getRhsSym(2) as ASTNode)
                //#line 292 snooperParser.g
                );
            
            };
            //
            // Rule 116:  PreDecrementExpression ::= -- UnaryExpression
            //
             _rule_action[116]=(){
               //#line 294 "snooperParser.g"
                setResult(
                    //#line 294 snooperParser.g
                    PreDecrementExpression(getLeftIToken(), getRightIToken(),
                                           //#line 294 snooperParser.g
                                           ASTNodeToken(getRhsIToken(1)),
                                           //#line 294 snooperParser.g
                                           getRhsSym(2) as ASTNode)
                //#line 294 snooperParser.g
                );
            
            };
            //
            // Rule 117:  UnaryExpressionNotPlusMinus ::= PostfixExpression
            //
            
                 
            //
            // Rule 118:  UnaryExpressionNotPlusMinus ::= ~ UnaryExpression
            //
             _rule_action[118]=(){
               //#line 297 "snooperParser.g"
                setResult(
                    //#line 297 snooperParser.g
                    UnaryExpNotPlusMinus_Xor(getLeftIToken(), getRightIToken(),
                                             //#line 297 snooperParser.g
                                             ASTNodeToken(getRhsIToken(1)),
                                             //#line 297 snooperParser.g
                                             getRhsSym(2) as ASTNode)
                //#line 297 snooperParser.g
                );
            
            };
            //
            // Rule 119:  UnaryExpressionNotPlusMinus ::= ! UnaryExpression
            //
             _rule_action[119]=(){
               //#line 298 "snooperParser.g"
                setResult(
                    //#line 298 snooperParser.g
                    UnaryExpNotPlusMinus_Not(getLeftIToken(), getRightIToken(),
                                             //#line 298 snooperParser.g
                                             ASTNodeToken(getRhsIToken(1)),
                                             //#line 298 snooperParser.g
                                             getRhsSym(2) as ASTNode)
                //#line 298 snooperParser.g
                );
            
            };
            //
            // Rule 120:  MultiplicativeExpression ::= UnaryExpression
            //
            
                 
            //
            // Rule 121:  MultiplicativeExpression ::= MultiplicativeExpression * UnaryExpression
            //
             _rule_action[121]=(){
               //#line 302 "snooperParser.g"
                setResult(
                    //#line 302 snooperParser.g
                    MultiplicativeExp_Divide(getLeftIToken(), getRightIToken(),
                                             //#line 302 snooperParser.g
                                             getRhsSym(1) as ASTNode,
                                             //#line 302 snooperParser.g
                                             ASTNodeToken(getRhsIToken(2)),
                                             //#line 302 snooperParser.g
                                             getRhsSym(3) as ASTNode)
                //#line 302 snooperParser.g
                );
            
            };
            //
            // Rule 122:  MultiplicativeExpression ::= MultiplicativeExpression / UnaryExpression
            //
             _rule_action[122]=(){
               //#line 303 "snooperParser.g"
                setResult(
                    //#line 303 snooperParser.g
                    MultiplicativeExp_Multiply(getLeftIToken(), getRightIToken(),
                                               //#line 303 snooperParser.g
                                               getRhsSym(1) as ASTNode,
                                               //#line 303 snooperParser.g
                                               ASTNodeToken(getRhsIToken(2)),
                                               //#line 303 snooperParser.g
                                               getRhsSym(3) as ASTNode)
                //#line 303 snooperParser.g
                );
            
            };
            //
            // Rule 123:  MultiplicativeExpression ::= MultiplicativeExpression % UnaryExpression
            //
             _rule_action[123]=(){
               //#line 304 "snooperParser.g"
                setResult(
                    //#line 304 snooperParser.g
                    MultiplicativeExp_Remainder(getLeftIToken(), getRightIToken(),
                                                //#line 304 snooperParser.g
                                                getRhsSym(1) as ASTNode,
                                                //#line 304 snooperParser.g
                                                ASTNodeToken(getRhsIToken(2)),
                                                //#line 304 snooperParser.g
                                                getRhsSym(3) as ASTNode)
                //#line 304 snooperParser.g
                );
            
            };
            //
            // Rule 124:  AdditiveExpression ::= MultiplicativeExpression
            //
            
                 
            //
            // Rule 125:  AdditiveExpression ::= AdditiveExpression + MultiplicativeExpression
            //
             _rule_action[125]=(){
               //#line 307 "snooperParser.g"
                setResult(
                    //#line 307 snooperParser.g
                    AdditiveExp_Plus(getLeftIToken(), getRightIToken(),
                                     //#line 307 snooperParser.g
                                     getRhsSym(1) as ASTNode,
                                     //#line 307 snooperParser.g
                                     ASTNodeToken(getRhsIToken(2)),
                                     //#line 307 snooperParser.g
                                     getRhsSym(3) as ASTNode)
                //#line 307 snooperParser.g
                );
            
            };
            //
            // Rule 126:  AdditiveExpression ::= AdditiveExpression - MultiplicativeExpression
            //
             _rule_action[126]=(){
               //#line 308 "snooperParser.g"
                setResult(
                    //#line 308 snooperParser.g
                    AdditiveExp_Minus(getLeftIToken(), getRightIToken(),
                                      //#line 308 snooperParser.g
                                      getRhsSym(1) as ASTNode,
                                      //#line 308 snooperParser.g
                                      ASTNodeToken(getRhsIToken(2)),
                                      //#line 308 snooperParser.g
                                      getRhsSym(3) as ASTNode)
                //#line 308 snooperParser.g
                );
            
            };
            //
            // Rule 127:  ShiftExpression ::= AdditiveExpression
            //
            
                 
            //
            // Rule 128:  ShiftExpression ::= ShiftExpression << AdditiveExpression
            //
             _rule_action[128]=(){
               //#line 311 "snooperParser.g"
                setResult(
                    //#line 311 snooperParser.g
                    ShiftExp_Left(getLeftIToken(), getRightIToken(),
                                  //#line 311 snooperParser.g
                                  getRhsSym(1) as ASTNode,
                                  //#line 311 snooperParser.g
                                  ASTNodeToken(getRhsIToken(2)),
                                  //#line 311 snooperParser.g
                                  getRhsSym(3) as ASTNode)
                //#line 311 snooperParser.g
                );
            
            };
            //
            // Rule 129:  ShiftExpression ::= ShiftExpression >> AdditiveExpression
            //
             _rule_action[129]=(){
               //#line 312 "snooperParser.g"
                setResult(
                    //#line 312 snooperParser.g
                    ShiftExp_Right(getLeftIToken(), getRightIToken(),
                                   //#line 312 snooperParser.g
                                   getRhsSym(1) as ASTNode,
                                   //#line 312 snooperParser.g
                                   ASTNodeToken(getRhsIToken(2)),
                                   //#line 312 snooperParser.g
                                   getRhsSym(3) as ASTNode)
                //#line 312 snooperParser.g
                );
            
            };
            //
            // Rule 130:  RelationalExpression ::= ShiftExpression
            //
            
                 
            //
            // Rule 131:  RelationalExpression ::= RelationalExpression < ShiftExpression
            //
             _rule_action[131]=(){
               //#line 315 "snooperParser.g"
                setResult(
                    //#line 315 snooperParser.g
                    RelationalExp_Less(getLeftIToken(), getRightIToken(),
                                       //#line 315 snooperParser.g
                                       getRhsSym(1) as ASTNode,
                                       //#line 315 snooperParser.g
                                       ASTNodeToken(getRhsIToken(2)),
                                       //#line 315 snooperParser.g
                                       getRhsSym(3) as ASTNode)
                //#line 315 snooperParser.g
                );
            
            };
            //
            // Rule 132:  RelationalExpression ::= RelationalExpression > ShiftExpression
            //
             _rule_action[132]=(){
               //#line 316 "snooperParser.g"
                setResult(
                    //#line 316 snooperParser.g
                    RelationalExp_Greater(getLeftIToken(), getRightIToken(),
                                          //#line 316 snooperParser.g
                                          getRhsSym(1) as ASTNode,
                                          //#line 316 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 316 snooperParser.g
                                          getRhsSym(3) as ASTNode)
                //#line 316 snooperParser.g
                );
            
            };
            //
            // Rule 133:  RelationalExpression ::= RelationalExpression <= ShiftExpression
            //
             _rule_action[133]=(){
               //#line 317 "snooperParser.g"
                setResult(
                    //#line 317 snooperParser.g
                    RelationalExp_LessEqual(getLeftIToken(), getRightIToken(),
                                            //#line 317 snooperParser.g
                                            getRhsSym(1) as ASTNode,
                                            //#line 317 snooperParser.g
                                            ASTNodeToken(getRhsIToken(2)),
                                            //#line 317 snooperParser.g
                                            getRhsSym(3) as ASTNode)
                //#line 317 snooperParser.g
                );
            
            };
            //
            // Rule 134:  RelationalExpression ::= RelationalExpression >= ShiftExpression
            //
             _rule_action[134]=(){
               //#line 318 "snooperParser.g"
                setResult(
                    //#line 318 snooperParser.g
                    RelationalExp_GreaterEqual(getLeftIToken(), getRightIToken(),
                                               //#line 318 snooperParser.g
                                               getRhsSym(1) as ASTNode,
                                               //#line 318 snooperParser.g
                                               ASTNodeToken(getRhsIToken(2)),
                                               //#line 318 snooperParser.g
                                               getRhsSym(3) as ASTNode)
                //#line 318 snooperParser.g
                );
            
            };
            //
            // Rule 135:  EqualityExpression ::= RelationalExpression
            //
            
                 
            //
            // Rule 136:  EqualityExpression ::= EqualityExpression == RelationalExpression
            //
             _rule_action[136]=(){
               //#line 322 "snooperParser.g"
                setResult(
                    //#line 322 snooperParser.g
                    EqualityExpr_EqualEqual(getLeftIToken(), getRightIToken(),
                                            //#line 322 snooperParser.g
                                            getRhsSym(1) as ASTNode,
                                            //#line 322 snooperParser.g
                                            ASTNodeToken(getRhsIToken(2)),
                                            //#line 322 snooperParser.g
                                            getRhsSym(3) as ASTNode)
                //#line 322 snooperParser.g
                );
            
            };
            //
            // Rule 137:  EqualityExpression ::= EqualityExpression != RelationalExpression
            //
             _rule_action[137]=(){
               //#line 323 "snooperParser.g"
                setResult(
                    //#line 323 snooperParser.g
                    EqualityExpr_NotEqual(getLeftIToken(), getRightIToken(),
                                          //#line 323 snooperParser.g
                                          getRhsSym(1) as ASTNode,
                                          //#line 323 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 323 snooperParser.g
                                          getRhsSym(3) as ASTNode)
                //#line 323 snooperParser.g
                );
            
            };
            //
            // Rule 138:  AndExpression ::= EqualityExpression
            //
            
                 
            //
            // Rule 139:  AndExpression ::= AndExpression & EqualityExpression
            //
             _rule_action[139]=(){
               //#line 326 "snooperParser.g"
                setResult(
                    //#line 326 snooperParser.g
                    AndExpression(getLeftIToken(), getRightIToken(),
                                  //#line 326 snooperParser.g
                                  getRhsSym(1) as ASTNode,
                                  //#line 326 snooperParser.g
                                  ASTNodeToken(getRhsIToken(2)),
                                  //#line 326 snooperParser.g
                                  getRhsSym(3) as ASTNode)
                //#line 326 snooperParser.g
                );
            
            };
            //
            // Rule 140:  ExclusiveOrExpression ::= AndExpression
            //
            
                 
            //
            // Rule 141:  ExclusiveOrExpression ::= ExclusiveOrExpression ^ AndExpression
            //
             _rule_action[141]=(){
               //#line 329 "snooperParser.g"
                setResult(
                    //#line 329 snooperParser.g
                    ExclusiveOrExpression(getLeftIToken(), getRightIToken(),
                                          //#line 329 snooperParser.g
                                          getRhsSym(1) as ASTNode,
                                          //#line 329 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 329 snooperParser.g
                                          getRhsSym(3) as ASTNode)
                //#line 329 snooperParser.g
                );
            
            };
            //
            // Rule 142:  InclusiveOrExpression ::= ExclusiveOrExpression
            //
            
                 
            //
            // Rule 143:  InclusiveOrExpression ::= InclusiveOrExpression | ExclusiveOrExpression
            //
             _rule_action[143]=(){
               //#line 332 "snooperParser.g"
                setResult(
                    //#line 332 snooperParser.g
                    InclusiveOrExpression(getLeftIToken(), getRightIToken(),
                                          //#line 332 snooperParser.g
                                          getRhsSym(1) as ASTNode,
                                          //#line 332 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 332 snooperParser.g
                                          getRhsSym(3) as ASTNode)
                //#line 332 snooperParser.g
                );
            
            };
            //
            // Rule 144:  ConditionalAndExpression ::= InclusiveOrExpression
            //
            
                 
            //
            // Rule 145:  ConditionalAndExpression ::= ConditionalAndExpression && InclusiveOrExpression
            //
             _rule_action[145]=(){
               //#line 335 "snooperParser.g"
                setResult(
                    //#line 335 snooperParser.g
                    ConditionalAndExpression(getLeftIToken(), getRightIToken(),
                                             //#line 335 snooperParser.g
                                             getRhsSym(1) as ASTNode,
                                             //#line 335 snooperParser.g
                                             ASTNodeToken(getRhsIToken(2)),
                                             //#line 335 snooperParser.g
                                             getRhsSym(3) as ASTNode)
                //#line 335 snooperParser.g
                );
            
            };
            //
            // Rule 146:  ConditionalOrExpression ::= ConditionalAndExpression
            //
            
                 
            //
            // Rule 147:  ConditionalOrExpression ::= ConditionalOrExpression || ConditionalAndExpression
            //
             _rule_action[147]=(){
               //#line 338 "snooperParser.g"
                setResult(
                    //#line 338 snooperParser.g
                    ConditionalOrExpression(getLeftIToken(), getRightIToken(),
                                            //#line 338 snooperParser.g
                                            getRhsSym(1) as ASTNode,
                                            //#line 338 snooperParser.g
                                            ASTNodeToken(getRhsIToken(2)),
                                            //#line 338 snooperParser.g
                                            getRhsSym(3) as ASTNode)
                //#line 338 snooperParser.g
                );
            
            };
            //
            // Rule 148:  Expression ::= ConditionalOrExpression
            //
            
                 
            //
            // Rule 149:  ExpressionStmt ::= Expression CRLF
            //
             _rule_action[149]=(){
               //#line 343 "snooperParser.g"
                setResult(
                    //#line 343 snooperParser.g
                    ExpressionStmt(getLeftIToken(), getRightIToken(),
                                   //#line 343 snooperParser.g
                                   getRhsSym(1) as ASTNode,
                                   //#line 343 snooperParser.g
                                   ASTNodeToken(getRhsIToken(2)))
                //#line 343 snooperParser.g
                );
            
            };
            //
            // Rule 150:  ExpressionOpt ::= %Empty
            //
             _rule_action[150]=(){
               //#line 345 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 151:  ExpressionOpt ::= Expression
            //
            
                 
            //
            // Rule 152:  VariableAndSW ::= sw
            //
             _rule_action[152]=(){
               //#line 348 "snooperParser.g"
                setResult(
                    //#line 348 snooperParser.g
                    VariableAndSW(this, getRhsIToken(1))
                //#line 348 snooperParser.g
                );
            
            };
            //
            // Rule 153:  VariableAndSW ::= Variable
            //
            
                 
            //
            // Rule 154:  ArgumentList ::= Expression
            //
             _rule_action[154]=(){
               //#line 354 "snooperParser.g"
                setResult(
                    //#line 354 snooperParser.g
                    ExpressionList.ExpressionListfromElement(getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 354 snooperParser.g
                );
            
            };
            //
            // Rule 155:  ArgumentList ::= ArgumentList , Expression
            //
             _rule_action[155]=(){
               //#line 354 "snooperParser.g"
                (getRhsSym(1) as ExpressionList).addElement(getRhsSym(3)as ASTNode);
            
            };
            //
            // Rule 156:  ArgumentListOpt ::= %Empty
            //
             _rule_action[156]=(){
               //#line 356 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 157:  ArgumentListOpt ::= ArgumentList
            //
            
                 
            //
            // Rule 158:  CallOpt ::= %Empty
            //
             _rule_action[158]=(){
               //#line 358 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 159:  CallOpt ::= call
            //
             _rule_action[159]=(){
               //#line 358 "snooperParser.g"
                setResult(
                    //#line 358 snooperParser.g
                    CallOpt(getRhsIToken(1))
                //#line 358 snooperParser.g
                );
            
            };
            //
            // Rule 160:  FunctionCall ::= CallOpt IDENTIFIER ( ArgumentListOpt )
            //
             _rule_action[160]=(){
               //#line 360 "snooperParser.g"
                setResult(
                    //#line 360 snooperParser.g
                    FunctionCall(this, getLeftIToken(), getRightIToken(),
                                 //#line 360 snooperParser.g
                                 getRhsSym(1) as CallOpt?,
                                 //#line 360 snooperParser.g
                                 ASTNodeToken(getRhsIToken(2)),
                                 //#line 360 snooperParser.g
                                 ASTNodeToken(getRhsIToken(3)),
                                 //#line 360 snooperParser.g
                                 getRhsSym(4) as ExpressionList?,
                                 //#line 360 snooperParser.g
                                 ASTNodeToken(getRhsIToken(5)))
                //#line 360 snooperParser.g
                );
            
            };
            //
            // Rule 161:  FunctionCall ::= Des_3des_mac_call
            //
            
                 
            //
            // Rule 162:  FunctionCall ::= Full_3des_mac_call
            //
            
                 
            //
            // Rule 163:  ExitStatement ::= exit for CRLF
            //
             _rule_action[163]=(){
               //#line 369 "snooperParser.g"
                setResult(
                    //#line 369 snooperParser.g
                    ExitForStatement(getLeftIToken(), getRightIToken(),
                                     //#line 369 snooperParser.g
                                     ASTNodeToken(getRhsIToken(1)),
                                     //#line 369 snooperParser.g
                                     ASTNodeToken(getRhsIToken(2)),
                                     //#line 369 snooperParser.g
                                     ASTNodeToken(getRhsIToken(3)))
                //#line 369 snooperParser.g
                );
            
            };
            //
            // Rule 164:  ExitStatement ::= exit hfor CRLF
            //
             _rule_action[164]=(){
               //#line 371 "snooperParser.g"
                setResult(
                    //#line 371 snooperParser.g
                    ExitHforStatement(getLeftIToken(), getRightIToken(),
                                      //#line 371 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 371 snooperParser.g
                                      ASTNodeToken(getRhsIToken(2)),
                                      //#line 371 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 371 snooperParser.g
                );
            
            };
            //
            // Rule 165:  LoadOption ::= load_script
            //
             _rule_action[165]=(){
               //#line 375 "snooperParser.g"
                setResult(
                    //#line 375 snooperParser.g
                    LoadOption_load_script(getRhsIToken(1))
                //#line 375 snooperParser.g
                );
            
            };
            //
            // Rule 166:  LoadOption ::= loadprofile
            //
             _rule_action[166]=(){
               //#line 377 "snooperParser.g"
                setResult(
                    //#line 377 snooperParser.g
                    LoadOption_loadprofile(getRhsIToken(1))
                //#line 377 snooperParser.g
                );
            
            };
            //
            // Rule 167:  LoadOption ::= run_script
            //
             _rule_action[167]=(){
               //#line 379 "snooperParser.g"
                setResult(
                    //#line 379 snooperParser.g
                    LoadOption_run_script(getRhsIToken(1))
                //#line 379 snooperParser.g
                );
            
            };
            //
            // Rule 168:  LoadScriptStmt ::= LoadOption STRING_LITERAL CRLF
            //
             _rule_action[168]=(){
               //#line 381 "snooperParser.g"
                setResult(
                    //#line 381 snooperParser.g
                    LoadScriptStmt(getLeftIToken(), getRightIToken(),
                                   //#line 381 snooperParser.g
                                   getRhsSym(1) as ASTNode,
                                   //#line 381 snooperParser.g
                                   ASTNodeToken(getRhsIToken(2)),
                                   //#line 381 snooperParser.g
                                   ASTNodeToken(getRhsIToken(3)))
                //#line 381 snooperParser.g
                );
            
            };
            //
            // Rule 169:  SimpleOption ::= timer_begin
            //
             _rule_action[169]=(){
               //#line 383 "snooperParser.g"
                setResult(
                    //#line 383 snooperParser.g
                    SimpleOption_timer_begin(getRhsIToken(1))
                //#line 383 snooperParser.g
                );
            
            };
            //
            // Rule 170:  SimpleOption ::= timer_end
            //
             _rule_action[170]=(){
               //#line 384 "snooperParser.g"
                setResult(
                    //#line 384 snooperParser.g
                    SimpleOption_timer_end(getRhsIToken(1))
                //#line 384 snooperParser.g
                );
            
            };
            //
            // Rule 171:  SimpleOption ::= pause
            //
             _rule_action[171]=(){
               //#line 385 "snooperParser.g"
                setResult(
                    //#line 385 snooperParser.g
                    SimpleOption_pause(getRhsIToken(1))
                //#line 385 snooperParser.g
                );
            
            };
            //
            // Rule 172:  SimpleOption ::= __file__
            //
             _rule_action[172]=(){
               //#line 386 "snooperParser.g"
                setResult(
                    //#line 386 snooperParser.g
                    SimpleOption_file(getRhsIToken(1))
                //#line 386 snooperParser.g
                );
            
            };
            //
            // Rule 173:  SimpleOption ::= __line__
            //
             _rule_action[173]=(){
               //#line 387 "snooperParser.g"
                setResult(
                    //#line 387 snooperParser.g
                    SimpleOption_line(getRhsIToken(1))
                //#line 387 snooperParser.g
                );
            
            };
            //
            // Rule 174:  SimpleOption ::= clear_fifo
            //
             _rule_action[174]=(){
               //#line 388 "snooperParser.g"
                setResult(
                    //#line 388 snooperParser.g
                    SimpleOption_clear_fifo(getRhsIToken(1))
                //#line 388 snooperParser.g
                );
            
            };
            //
            // Rule 175:  SimpleOption ::= beep
            //
             _rule_action[175]=(){
               //#line 389 "snooperParser.g"
                setResult(
                    //#line 389 snooperParser.g
                    SimpleOption_beep(getRhsIToken(1))
                //#line 389 snooperParser.g
                );
            
            };
            //
            // Rule 176:  SimpleOption ::= eject
            //
             _rule_action[176]=(){
               //#line 390 "snooperParser.g"
                setResult(
                    //#line 390 snooperParser.g
                    SimpleOption_eject(getRhsIToken(1))
                //#line 390 snooperParser.g
                );
            
            };
            //
            // Rule 177:  SimpleOption ::= insert
            //
             _rule_action[177]=(){
               //#line 391 "snooperParser.g"
                setResult(
                    //#line 391 snooperParser.g
                    SimpleOption_insert(getRhsIToken(1))
                //#line 391 snooperParser.g
                );
            
            };
            //
            // Rule 178:  SimpleOption ::= split
            //
             _rule_action[178]=(){
               //#line 392 "snooperParser.g"
                setResult(
                    //#line 392 snooperParser.g
                    SimpleOption_split(getRhsIToken(1))
                //#line 392 snooperParser.g
                );
            
            };
            //
            // Rule 179:  SimpleOption ::= end
            //
             _rule_action[179]=(){
               //#line 393 "snooperParser.g"
                setResult(
                    //#line 393 snooperParser.g
                    SimpleOption_end(getRhsIToken(1))
                //#line 393 snooperParser.g
                );
            
            };
            //
            // Rule 180:  SimpleOption ::= clear
            //
             _rule_action[180]=(){
               //#line 394 "snooperParser.g"
                setResult(
                    //#line 394 snooperParser.g
                    SimpleOption_clear(getRhsIToken(1))
                //#line 394 snooperParser.g
                );
            
            };
            //
            // Rule 181:  KeyWordWithoutParameterStmt ::= SimpleOption CRLF
            //
             _rule_action[181]=(){
               //#line 396 "snooperParser.g"
                setResult(
                    //#line 396 snooperParser.g
                    KeyWordWithoutParameterStmt(getLeftIToken(), getRightIToken(),
                                                //#line 396 snooperParser.g
                                                getRhsSym(1) as ASTNode,
                                                //#line 396 snooperParser.g
                                                ASTNodeToken(getRhsIToken(2)))
                //#line 396 snooperParser.g
                );
            
            };
            //
            // Rule 182:  SleepStmt ::= sleep Expression CRLF
            //
             _rule_action[182]=(){
               //#line 399 "snooperParser.g"
                setResult(
                    //#line 399 snooperParser.g
                    SleepStmt(getLeftIToken(), getRightIToken(),
                              //#line 399 snooperParser.g
                              ASTNodeToken(getRhsIToken(1)),
                              //#line 399 snooperParser.g
                              getRhsSym(2) as ASTNode,
                              //#line 399 snooperParser.g
                              ASTNodeToken(getRhsIToken(3)))
                //#line 399 snooperParser.g
                );
            
            };
            //
            // Rule 183:  SetStmt ::= set IDENTIFIER CRLF
            //
             _rule_action[183]=(){
               //#line 401 "snooperParser.g"
                setResult(
                    //#line 401 snooperParser.g
                    SetStmt_Identifier(getLeftIToken(), getRightIToken(),
                                       //#line 401 snooperParser.g
                                       ASTNodeToken(getRhsIToken(1)),
                                       //#line 401 snooperParser.g
                                       ASTNodeToken(getRhsIToken(2)),
                                       //#line 401 snooperParser.g
                                       ASTNodeToken(getRhsIToken(3)))
                //#line 401 snooperParser.g
                );
            
            };
            //
            // Rule 184:  SetStmt ::= set Variable CRLF
            //
             _rule_action[184]=(){
               //#line 403 "snooperParser.g"
                setResult(
                    //#line 403 snooperParser.g
                    SetStmt_MacroName(getLeftIToken(), getRightIToken(),
                                      //#line 403 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 403 snooperParser.g
                                      getRhsSym(2) as ASTNode,
                                      //#line 403 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 403 snooperParser.g
                );
            
            };
            //
            // Rule 185:  PrintStmt ::= message ExpressionOpt CRLF
            //
             _rule_action[185]=(){
               //#line 405 "snooperParser.g"
                setResult(
                    //#line 405 snooperParser.g
                    PrintStmt_Message(getLeftIToken(), getRightIToken(),
                                      //#line 405 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 405 snooperParser.g
                                      getRhsSym(2) as ASTNode?,
                                      //#line 405 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 405 snooperParser.g
                );
            
            };
            //
            // Rule 186:  PrintStmt ::= ? ExpressionOpt CRLF
            //
             _rule_action[186]=(){
               //#line 407 "snooperParser.g"
                setResult(
                    //#line 407 snooperParser.g
                    PrintStmt_Quqstion(getLeftIToken(), getRightIToken(),
                                       //#line 407 snooperParser.g
                                       ASTNodeToken(getRhsIToken(1)),
                                       //#line 407 snooperParser.g
                                       getRhsSym(2) as ASTNode?,
                                       //#line 407 snooperParser.g
                                       ASTNodeToken(getRhsIToken(3)))
                //#line 407 snooperParser.g
                );
            
            };
            //
            // Rule 187:  OnOffOption ::= on
            //
             _rule_action[187]=(){
               //#line 409 "snooperParser.g"
                setResult(
                    //#line 409 snooperParser.g
                    OnOffOption_on(getRhsIToken(1))
                //#line 409 snooperParser.g
                );
            
            };
            //
            // Rule 188:  OnOffOption ::= off
            //
             _rule_action[188]=(){
               //#line 411 "snooperParser.g"
                setResult(
                    //#line 411 snooperParser.g
                    OnOffOption_off(getRhsIToken(1))
                //#line 411 snooperParser.g
                );
            
            };
            //
            // Rule 189:  AutoResponseStmt ::= auto_response OnOffOption CRLF
            //
             _rule_action[189]=(){
               //#line 413 "snooperParser.g"
                setResult(
                    //#line 413 snooperParser.g
                    AutoResponseStmt(getLeftIToken(), getRightIToken(),
                                     //#line 413 snooperParser.g
                                     ASTNodeToken(getRhsIToken(1)),
                                     //#line 413 snooperParser.g
                                     getRhsSym(2) as ASTNode,
                                     //#line 413 snooperParser.g
                                     ASTNodeToken(getRhsIToken(3)))
                //#line 413 snooperParser.g
                );
            
            };
            //
            // Rule 190:  WriteFifoStmt ::= write_fifo IDENTIFIER CRLF
            //
             _rule_action[190]=(){
               //#line 415 "snooperParser.g"
                setResult(
                    //#line 415 snooperParser.g
                    WriteFifoStmt_Identifier(getLeftIToken(), getRightIToken(),
                                             //#line 415 snooperParser.g
                                             ASTNodeToken(getRhsIToken(1)),
                                             //#line 415 snooperParser.g
                                             ASTNodeToken(getRhsIToken(2)),
                                             //#line 415 snooperParser.g
                                             ASTNodeToken(getRhsIToken(3)))
                //#line 415 snooperParser.g
                );
            
            };
            //
            // Rule 191:  WriteFifoStmt ::= write_fifo Variable CRLF
            //
             _rule_action[191]=(){
               //#line 417 "snooperParser.g"
                setResult(
                    //#line 417 snooperParser.g
                    WriteFifoStmt_MacroName(getLeftIToken(), getRightIToken(),
                                            //#line 417 snooperParser.g
                                            ASTNodeToken(getRhsIToken(1)),
                                            //#line 417 snooperParser.g
                                            getRhsSym(2) as ASTNode,
                                            //#line 417 snooperParser.g
                                            ASTNodeToken(getRhsIToken(3)))
                //#line 417 snooperParser.g
                );
            
            };
            //
            // Rule 192:  UploadStmt ::= upload STRING_LITERAL CRLF
            //
             _rule_action[192]=(){
               //#line 419 "snooperParser.g"
                setResult(
                    //#line 419 snooperParser.g
                    UploadStmt_upload(getLeftIToken(), getRightIToken(),
                                      //#line 419 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 419 snooperParser.g
                                      ASTNodeToken(getRhsIToken(2)),
                                      //#line 419 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 419 snooperParser.g
                );
            
            };
            //
            // Rule 193:  UploadStmt ::= upload2 STRING_LITERAL CRLF
            //
             _rule_action[193]=(){
               //#line 421 "snooperParser.g"
                setResult(
                    //#line 421 snooperParser.g
                    UploadStmt_upload2(getLeftIToken(), getRightIToken(),
                                       //#line 421 snooperParser.g
                                       ASTNodeToken(getRhsIToken(1)),
                                       //#line 421 snooperParser.g
                                       ASTNodeToken(getRhsIToken(2)),
                                       //#line 421 snooperParser.g
                                       ASTNodeToken(getRhsIToken(3)))
                //#line 421 snooperParser.g
                );
            
            };
            //
            // Rule 194:  ResetStmt ::= reset CRLF
            //
             _rule_action[194]=(){
               //#line 423 "snooperParser.g"
                setResult(
                    //#line 423 snooperParser.g
                    ResetStmt_reset(getLeftIToken(), getRightIToken(),
                                    //#line 423 snooperParser.g
                                    ASTNodeToken(getRhsIToken(1)),
                                    //#line 423 snooperParser.g
                                    ASTNodeToken(getRhsIToken(2)))
                //#line 423 snooperParser.g
                );
            
            };
            //
            // Rule 195:  ResetStmt ::= reset2 CRLF
            //
             _rule_action[195]=(){
               //#line 425 "snooperParser.g"
                setResult(
                    //#line 425 snooperParser.g
                    ResetStmt_reset2(getLeftIToken(), getRightIToken(),
                                     //#line 425 snooperParser.g
                                     ASTNodeToken(getRhsIToken(1)),
                                     //#line 425 snooperParser.g
                                     ASTNodeToken(getRhsIToken(2)))
                //#line 425 snooperParser.g
                );
            
            };
            //
            // Rule 196:  ResetStmt ::= reset cold CRLF
            //
             _rule_action[196]=(){
               //#line 427 "snooperParser.g"
                setResult(
                    //#line 427 snooperParser.g
                    ResetStmt_reset_cold(getLeftIToken(), getRightIToken(),
                                         //#line 427 snooperParser.g
                                         ASTNodeToken(getRhsIToken(1)),
                                         //#line 427 snooperParser.g
                                         ASTNodeToken(getRhsIToken(2)),
                                         //#line 427 snooperParser.g
                                         ASTNodeToken(getRhsIToken(3)))
                //#line 427 snooperParser.g
                );
            
            };
            //
            // Rule 197:  ResetStmt ::= reset2 cold CRLF
            //
             _rule_action[197]=(){
               //#line 429 "snooperParser.g"
                setResult(
                    //#line 429 snooperParser.g
                    ResetStmt_reset2_cold(getLeftIToken(), getRightIToken(),
                                          //#line 429 snooperParser.g
                                          ASTNodeToken(getRhsIToken(1)),
                                          //#line 429 snooperParser.g
                                          ASTNodeToken(getRhsIToken(2)),
                                          //#line 429 snooperParser.g
                                          ASTNodeToken(getRhsIToken(3)))
                //#line 429 snooperParser.g
                );
            
            };
            //
            // Rule 198:  InstallParameter ::= PrimaryAssignmentStmt
            //
            
                 
            //
            // Rule 199:  InstallParameter ::= ParameterItem
            //
            
                 
            //
            // Rule 200:  InstallParameterList ::= InstallParameter
            //
             _rule_action[200]=(){
               //#line 432 "snooperParser.g"
                setResult(
                    //#line 432 snooperParser.g
                    InstallParameterList.InstallParameterListfromElement(getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 432 snooperParser.g
                );
            
            };
            //
            // Rule 201:  InstallParameterList ::= InstallParameterList , InstallParameter
            //
             _rule_action[201]=(){
               //#line 433 "snooperParser.g"
                (getRhsSym(1) as InstallParameterList).addElement(getRhsSym(3)as ASTNode);
            
            };
            //
            // Rule 202:  InstallStmt ::= install InstallParameterList CRLF
            //
             _rule_action[202]=(){
               //#line 435 "snooperParser.g"
                setResult(
                    //#line 435 snooperParser.g
                    InstallStmt_install(getLeftIToken(), getRightIToken(),
                                        //#line 435 snooperParser.g
                                        ASTNodeToken(getRhsIToken(1)),
                                        //#line 435 snooperParser.g
                                        getRhsSym(2) as InstallParameterList,
                                        //#line 435 snooperParser.g
                                        ASTNodeToken(getRhsIToken(3)))
                //#line 435 snooperParser.g
                );
            
            };
            //
            // Rule 203:  InstallStmt ::= install_2 InstallParameterList CRLF
            //
             _rule_action[203]=(){
               //#line 437 "snooperParser.g"
                setResult(
                    //#line 437 snooperParser.g
                    InstallStmt_install_2(getLeftIToken(), getRightIToken(),
                                          //#line 437 snooperParser.g
                                          ASTNodeToken(getRhsIToken(1)),
                                          //#line 437 snooperParser.g
                                          getRhsSym(2) as InstallParameterList,
                                          //#line 437 snooperParser.g
                                          ASTNodeToken(getRhsIToken(3)))
                //#line 437 snooperParser.g
                );
            
            };
            //
            // Rule 204:  ParameterItem ::= IDENTIFIER
            //
             _rule_action[204]=(){
               //#line 439 "snooperParser.g"
                setResult(
                    //#line 439 snooperParser.g
                    ParameterItem(getRhsIToken(1))
                //#line 439 snooperParser.g
                );
            
            };
            //
            // Rule 205:  ParameterItem ::= VariableAndSW
            //
            
                 
            //
            // Rule 206:  ParameterItem ::= NumberLiteral
            //
            
                 
            //
            // Rule 207:  ParameterItem ::= StringLiteral
            //
            
                 
            //
            // Rule 208:  UtilFunctionParameterList ::= ParameterItem
            //
             _rule_action[208]=(){
               //#line 441 "snooperParser.g"
                setResult(
                    //#line 441 snooperParser.g
                    ParameterItemList.ParameterItemListfromElement(getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 441 snooperParser.g
                );
            
            };
            //
            // Rule 209:  UtilFunctionParameterList ::= UtilFunctionParameterList , ParameterItem
            //
             _rule_action[209]=(){
               //#line 441 "snooperParser.g"
                (getRhsSym(1) as ParameterItemList).addElement(getRhsSym(3)as ASTNode);
            
            };
            //
            // Rule 210:  JcopAuthStmt ::= jcop22_ext_auth UtilFunctionParameterList CRLF
            //
             _rule_action[210]=(){
               //#line 443 "snooperParser.g"
                setResult(
                    //#line 443 snooperParser.g
                    JcopAuthStmt_jcop22_ext_auth(getLeftIToken(), getRightIToken(),
                                                 //#line 443 snooperParser.g
                                                 ASTNodeToken(getRhsIToken(1)),
                                                 //#line 443 snooperParser.g
                                                 getRhsSym(2) as ParameterItemList,
                                                 //#line 443 snooperParser.g
                                                 ASTNodeToken(getRhsIToken(3)))
                //#line 443 snooperParser.g
                );
            
            };
            //
            // Rule 211:  JcopAuthStmt ::= jcop22_ext_auth_kmc UtilFunctionParameterList CRLF
            //
             _rule_action[211]=(){
               //#line 445 "snooperParser.g"
                setResult(
                    //#line 445 snooperParser.g
                    JcopAuthStmt_jcop22_ext_auth_kmc(getLeftIToken(), getRightIToken(),
                                                     //#line 445 snooperParser.g
                                                     ASTNodeToken(getRhsIToken(1)),
                                                     //#line 445 snooperParser.g
                                                     getRhsSym(2) as ParameterItemList,
                                                     //#line 445 snooperParser.g
                                                     ASTNodeToken(getRhsIToken(3)))
                //#line 445 snooperParser.g
                );
            
            };
            //
            // Rule 212:  JcopAuthStmt ::= jcop22_ext_auth_2 UtilFunctionParameterList CRLF
            //
             _rule_action[212]=(){
               //#line 447 "snooperParser.g"
                setResult(
                    //#line 447 snooperParser.g
                    JcopAuthStmt_jcop22_ext_auth_2(getLeftIToken(), getRightIToken(),
                                                   //#line 447 snooperParser.g
                                                   ASTNodeToken(getRhsIToken(1)),
                                                   //#line 447 snooperParser.g
                                                   getRhsSym(2) as ParameterItemList,
                                                   //#line 447 snooperParser.g
                                                   ASTNodeToken(getRhsIToken(3)))
                //#line 447 snooperParser.g
                );
            
            };
            //
            // Rule 213:  JcopAuthStmt ::= jcop22_ext_auth_kmc_2 UtilFunctionParameterList CRLF
            //
             _rule_action[213]=(){
               //#line 449 "snooperParser.g"
                setResult(
                    //#line 449 snooperParser.g
                    JcopAuthStmt_jcop22_ext_auth_kmc_2(getLeftIToken(), getRightIToken(),
                                                       //#line 449 snooperParser.g
                                                       ASTNodeToken(getRhsIToken(1)),
                                                       //#line 449 snooperParser.g
                                                       getRhsSym(2) as ParameterItemList,
                                                       //#line 449 snooperParser.g
                                                       ASTNodeToken(getRhsIToken(3)))
                //#line 449 snooperParser.g
                );
            
            };
            //
            // Rule 214:  JcopAuthStmt ::= jcop22_ext_auth_nonblock UtilFunctionParameterList CRLF
            //
             _rule_action[214]=(){
               //#line 451 "snooperParser.g"
                setResult(
                    //#line 451 snooperParser.g
                    JcopAuthStmt_jcop22_ext_auth_nonblock(getLeftIToken(), getRightIToken(),
                                                          //#line 451 snooperParser.g
                                                          ASTNodeToken(getRhsIToken(1)),
                                                          //#line 451 snooperParser.g
                                                          getRhsSym(2) as ParameterItemList,
                                                          //#line 451 snooperParser.g
                                                          ASTNodeToken(getRhsIToken(3)))
                //#line 451 snooperParser.g
                );
            
            };
            //
            // Rule 215:  SelectStmt ::= select IDENTIFIER UtilFunctionParameterList CRLF
            //
             _rule_action[215]=(){
               //#line 454 "snooperParser.g"
                setResult(
                    //#line 454 snooperParser.g
                    SelectStmt_select(getLeftIToken(), getRightIToken(),
                                      //#line 454 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 454 snooperParser.g
                                      ASTNodeToken(getRhsIToken(2)),
                                      //#line 454 snooperParser.g
                                      getRhsSym(3) as ParameterItemList,
                                      //#line 454 snooperParser.g
                                      ASTNodeToken(getRhsIToken(4)))
                //#line 454 snooperParser.g
                );
            
            };
            //
            // Rule 216:  SelectStmt ::= select_2 IDENTIFIER UtilFunctionParameterList CRLF
            //
             _rule_action[216]=(){
               //#line 456 "snooperParser.g"
                setResult(
                    //#line 456 snooperParser.g
                    SelectStmt_select_2(getLeftIToken(), getRightIToken(),
                                        //#line 456 snooperParser.g
                                        ASTNodeToken(getRhsIToken(1)),
                                        //#line 456 snooperParser.g
                                        ASTNodeToken(getRhsIToken(2)),
                                        //#line 456 snooperParser.g
                                        getRhsSym(3) as ParameterItemList,
                                        //#line 456 snooperParser.g
                                        ASTNodeToken(getRhsIToken(4)))
                //#line 456 snooperParser.g
                );
            
            };
            //
            // Rule 217:  DeleteStmt ::= delete UtilFunctionParameterList CRLF
            //
             _rule_action[217]=(){
               //#line 459 "snooperParser.g"
                setResult(
                    //#line 459 snooperParser.g
                    DeleteStmt_delete(getLeftIToken(), getRightIToken(),
                                      //#line 459 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 459 snooperParser.g
                                      getRhsSym(2) as ParameterItemList,
                                      //#line 459 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 459 snooperParser.g
                );
            
            };
            //
            // Rule 218:  DeleteStmt ::= delete_2 UtilFunctionParameterList CRLF
            //
             _rule_action[218]=(){
               //#line 461 "snooperParser.g"
                setResult(
                    //#line 461 snooperParser.g
                    DeleteStmt_delete_2(getLeftIToken(), getRightIToken(),
                                        //#line 461 snooperParser.g
                                        ASTNodeToken(getRhsIToken(1)),
                                        //#line 461 snooperParser.g
                                        getRhsSym(2) as ParameterItemList,
                                        //#line 461 snooperParser.g
                                        ASTNodeToken(getRhsIToken(3)))
                //#line 461 snooperParser.g
                );
            
            };
            //
            // Rule 219:  Apdu2Stmt ::= apdu2 ApduDataList CRLF
            //
             _rule_action[219]=(){
               //#line 463 "snooperParser.g"
                setResult(
                    //#line 463 snooperParser.g
                    Apdu2Stmt(getLeftIToken(), getRightIToken(),
                              //#line 463 snooperParser.g
                              ASTNodeToken(getRhsIToken(1)),
                              //#line 463 snooperParser.g
                              getRhsSym(2) as ApduDataList,
                              //#line 463 snooperParser.g
                              ASTNodeToken(getRhsIToken(3)))
                //#line 463 snooperParser.g
                );
            
            };
            //
            // Rule 220:  PromptStmt ::= prompt OnOffOption CRLF
            //
             _rule_action[220]=(){
               //#line 465 "snooperParser.g"
                setResult(
                    //#line 465 snooperParser.g
                    PromptStmt(getLeftIToken(), getRightIToken(),
                               //#line 465 snooperParser.g
                               ASTNodeToken(getRhsIToken(1)),
                               //#line 465 snooperParser.g
                               getRhsSym(2) as ASTNode,
                               //#line 465 snooperParser.g
                               ASTNodeToken(getRhsIToken(3)))
                //#line 465 snooperParser.g
                );
            
            };
            //
            // Rule 221:  ShowapduStmt ::= showapdu OnOffOption CRLF
            //
             _rule_action[221]=(){
               //#line 467 "snooperParser.g"
                setResult(
                    //#line 467 snooperParser.g
                    ShowapduStmt(getLeftIToken(), getRightIToken(),
                                 //#line 467 snooperParser.g
                                 ASTNodeToken(getRhsIToken(1)),
                                 //#line 467 snooperParser.g
                                 getRhsSym(2) as ASTNode,
                                 //#line 467 snooperParser.g
                                 ASTNodeToken(getRhsIToken(3)))
                //#line 467 snooperParser.g
                );
            
            };
            //
            // Rule 222:  Des_3des_mac_call ::= des_3des_mac ( ArgumentList )
            //
             _rule_action[222]=(){
               //#line 469 "snooperParser.g"
                setResult(
                    //#line 469 snooperParser.g
                    Des_3des_mac_call(getLeftIToken(), getRightIToken(),
                                      //#line 469 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 469 snooperParser.g
                                      ASTNodeToken(getRhsIToken(2)),
                                      //#line 469 snooperParser.g
                                      getRhsSym(3) as ExpressionList,
                                      //#line 469 snooperParser.g
                                      ASTNodeToken(getRhsIToken(4)))
                //#line 469 snooperParser.g
                );
            
            };
            //
            // Rule 223:  Des_3des_mac_Stmt ::= des_3des_mac ApduDataList CRLF
            //
             _rule_action[223]=(){
               //#line 470 "snooperParser.g"
                setResult(
                    //#line 470 snooperParser.g
                    Des_3des_mac_Stmt(getLeftIToken(), getRightIToken(),
                                      //#line 470 snooperParser.g
                                      ASTNodeToken(getRhsIToken(1)),
                                      //#line 470 snooperParser.g
                                      getRhsSym(2) as ApduDataList,
                                      //#line 470 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 470 snooperParser.g
                );
            
            };
            //
            // Rule 224:  Full_3des_mac_call ::= full_3des_mac ( ArgumentList )
            //
             _rule_action[224]=(){
               //#line 472 "snooperParser.g"
                setResult(
                    //#line 472 snooperParser.g
                    Full_3des_mac_call(getLeftIToken(), getRightIToken(),
                                       //#line 472 snooperParser.g
                                       ASTNodeToken(getRhsIToken(1)),
                                       //#line 472 snooperParser.g
                                       ASTNodeToken(getRhsIToken(2)),
                                       //#line 472 snooperParser.g
                                       getRhsSym(3) as ExpressionList,
                                       //#line 472 snooperParser.g
                                       ASTNodeToken(getRhsIToken(4)))
                //#line 472 snooperParser.g
                );
            
            };
            //
            // Rule 225:  Full_3des_mac_Stmt ::= full_3des_mac ApduDataList CRLF
            //
             _rule_action[225]=(){
               //#line 473 "snooperParser.g"
                setResult(
                    //#line 473 snooperParser.g
                    Full_3des_mac_Stmt(getLeftIToken(), getRightIToken(),
                                       //#line 473 snooperParser.g
                                       ASTNodeToken(getRhsIToken(1)),
                                       //#line 473 snooperParser.g
                                       getRhsSym(2) as ApduDataList,
                                       //#line 473 snooperParser.g
                                       ASTNodeToken(getRhsIToken(3)))
                //#line 473 snooperParser.g
                );
            
            };
            //
            // Rule 226:  Mac_auto_mac_option ::= mac_auto_mac
            //
             _rule_action[226]=(){
               //#line 476 "snooperParser.g"
                setResult(
                    //#line 476 snooperParser.g
                    Mac_auto_mac_option(getRhsIToken(1))
                //#line 476 snooperParser.g
                );
            
            };
            //
            // Rule 227:  Mac_auto_mac_option ::= mac_auto_mac_2
            //
             _rule_action[227]=(){
               //#line 477 "snooperParser.g"
                setResult(
                    //#line 477 snooperParser.g
                    Mac_auto_mac_option2(getRhsIToken(1))
                //#line 477 snooperParser.g
                );
            
            };
            //
            // Rule 228:  Mac_auto_mac_Stmt ::= Mac_auto_mac_option ApduDataList CRLF
            //
             _rule_action[228]=(){
               //#line 479 "snooperParser.g"
                setResult(
                    //#line 479 snooperParser.g
                    Mac_auto_mac_Stmt(getLeftIToken(), getRightIToken(),
                                      //#line 479 snooperParser.g
                                      getRhsSym(1) as ASTNode,
                                      //#line 479 snooperParser.g
                                      getRhsSym(2) as ApduDataList,
                                      //#line 479 snooperParser.g
                                      ASTNodeToken(getRhsIToken(3)))
                //#line 479 snooperParser.g
                );
            
            };
            //
            // Rule 229:  LineEndOpt ::= %Empty
            //
             _rule_action[229]=(){
               //#line 481 "snooperParser.g"
                setResult(null);
            
            };
            //
            // Rule 230:  LineEndOpt ::= CRLF
            //
             _rule_action[230]=(){
               //#line 481 "snooperParser.g"
                setResult(
                    //#line 481 snooperParser.g
                    LineEndOpt(getRhsIToken(1))
                //#line 481 snooperParser.g
                );
            
            };
            //
            // Rule 231:  SuperlongStmt ::= superlong { LineEndOpt ApduDataList } CRLF
            //
             _rule_action[231]=(){
               //#line 483 "snooperParser.g"
                setResult(
                    //#line 483 snooperParser.g
                    SuperlongStmtInOneLine(getLeftIToken(), getRightIToken(),
                                           //#line 483 snooperParser.g
                                           ASTNodeToken(getRhsIToken(1)),
                                           //#line 483 snooperParser.g
                                           ASTNodeToken(getRhsIToken(2)),
                                           //#line 483 snooperParser.g
                                           getRhsSym(3) as LineEndOpt?,
                                           //#line 483 snooperParser.g
                                           getRhsSym(4) as ApduDataList,
                                           //#line 483 snooperParser.g
                                           ASTNodeToken(getRhsIToken(5)),
                                           //#line 483 snooperParser.g
                                           ASTNodeToken(getRhsIToken(6)))
                //#line 483 snooperParser.g
                );
            
            };
            //
            // Rule 232:  MultipleLineApduDataList ::= ApduData CRLF
            //
             _rule_action[232]=(){
               //#line 485 "snooperParser.g"
                setResult(
                    //#line 485 snooperParser.g
                    ApduDataList.ApduDataListfromElement(getRhsSym(1) as ASTNode, true /* left recursive */)
                //#line 485 snooperParser.g
                );
            
            };
            //
            // Rule 233:  MultipleLineApduDataList ::= MultipleLineApduDataList ApduData CRLF
            //
             _rule_action[233]=(){
               //#line 485 "snooperParser.g"
                (getRhsSym(1) as ApduDataList).addElement(getRhsSym(2)as ASTNode);
            
            };
            //
            // Rule 234:  SuperlongStmt ::= superlong { LineEndOpt MultipleLineApduDataList } CRLF
            //
             _rule_action[234]=(){
               //#line 486 "snooperParser.g"
                setResult(
                    //#line 486 snooperParser.g
                    SuperlongStmtInMutipleLines(getLeftIToken(), getRightIToken(),
                                                //#line 486 snooperParser.g
                                                ASTNodeToken(getRhsIToken(1)),
                                                //#line 486 snooperParser.g
                                                ASTNodeToken(getRhsIToken(2)),
                                                //#line 486 snooperParser.g
                                                getRhsSym(3) as LineEndOpt?,
                                                //#line 486 snooperParser.g
                                                getRhsSym(4) as ApduDataList,
                                                //#line 486 snooperParser.g
                                                ASTNodeToken(getRhsIToken(5)),
                                                //#line 486 snooperParser.g
                                                ASTNodeToken(getRhsIToken(6)))
                //#line 486 snooperParser.g
                );
            
            };
            //
            // Rule 235:  CompareStmt ::= compare UtilFunctionParameterList CRLF
            //
             _rule_action[235]=(){
               //#line 489 "snooperParser.g"
                setResult(
                    //#line 489 snooperParser.g
                    CompareStmt(getLeftIToken(), getRightIToken(),
                                //#line 489 snooperParser.g
                                ASTNodeToken(getRhsIToken(1)),
                                //#line 489 snooperParser.g
                                getRhsSym(2) as ParameterItemList,
                                //#line 489 snooperParser.g
                                ASTNodeToken(getRhsIToken(3)))
                //#line 489 snooperParser.g
                );
            
            };
            //
            // Rule 236:  Socket_messageStmt ::= socket_message UtilFunctionParameterList CRLF
            //
             _rule_action[236]=(){
               //#line 491 "snooperParser.g"
                setResult(
                    //#line 491 snooperParser.g
                    Socket_messageStmt(getLeftIToken(), getRightIToken(),
                                       //#line 491 snooperParser.g
                                       ASTNodeToken(getRhsIToken(1)),
                                       //#line 491 snooperParser.g
                                       getRhsSym(2) as ParameterItemList,
                                       //#line 491 snooperParser.g
                                       ASTNodeToken(getRhsIToken(3)))
                //#line 491 snooperParser.g
                );
            
            };
            //
            // Rule 237:  GenerateStmt ::= generate IDENTIFIER UtilFunctionParameterList CRLF
            //
             _rule_action[237]=(){
               //#line 493 "snooperParser.g"
                setResult(
                    //#line 493 snooperParser.g
                    GenerateStmt(getLeftIToken(), getRightIToken(),
                                 //#line 493 snooperParser.g
                                 ASTNodeToken(getRhsIToken(1)),
                                 //#line 493 snooperParser.g
                                 ASTNodeToken(getRhsIToken(2)),
                                 //#line 493 snooperParser.g
                                 getRhsSym(3) as ParameterItemList,
                                 //#line 493 snooperParser.g
                                 ASTNodeToken(getRhsIToken(4)))
                //#line 493 snooperParser.g
                );
            
            };
            //
            // Rule 238:  SendtextStmt ::= sendtext Expression CRLF
            //
             _rule_action[238]=(){
               //#line 495 "snooperParser.g"
                setResult(
                    //#line 495 snooperParser.g
                    SendtextStmt(getLeftIToken(), getRightIToken(),
                                 //#line 495 snooperParser.g
                                 ASTNodeToken(getRhsIToken(1)),
                                 //#line 495 snooperParser.g
                                 getRhsSym(2) as ASTNode,
                                 //#line 495 snooperParser.g
                                 ASTNodeToken(getRhsIToken(3)))
                //#line 495 snooperParser.g
                );
            
            };
            //
            // Rule 239:  PushStmt ::= push ApduDataList CRLF
            //
             _rule_action[239]=(){
               //#line 497 "snooperParser.g"
                setResult(
                    //#line 497 snooperParser.g
                    PushStmt(getLeftIToken(), getRightIToken(),
                             //#line 497 snooperParser.g
                             ASTNodeToken(getRhsIToken(1)),
                             //#line 497 snooperParser.g
                             getRhsSym(2) as ApduDataList,
                             //#line 497 snooperParser.g
                             ASTNodeToken(getRhsIToken(3)))
                //#line 497 snooperParser.g
                );
            
            };
            //
            // Rule 240:  GotoStmt ::= goto IDENTIFIER CRLF
            //
             _rule_action[240]=(){
               //#line 499 "snooperParser.g"
                setResult(
                    //#line 499 snooperParser.g
                    GotoStmt(getLeftIToken(), getRightIToken(),
                             //#line 499 snooperParser.g
                             ASTNodeToken(getRhsIToken(1)),
                             //#line 499 snooperParser.g
                             ASTNodeToken(getRhsIToken(2)),
                             //#line 499 snooperParser.g
                             ASTNodeToken(getRhsIToken(3)))
                //#line 499 snooperParser.g
                );
            
            };
    //#line 281 "btParserTemplateF.gi

    }

}
abstract class IRootForsnooperParser
    {
         IToken getLeftIToken() ;
        IToken  getRightIToken() ;

         void acceptWithVisitor(Visitor v);
         void acceptWithArg(ArgumentVisitor v, Object? o);
        Object? acceptWithResult(ResultVisitor v);
        Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o);
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>SimpleName
     **<li>Variable
     **<li>BadVariable
     **<li>LetOpt
     **<li>NumberLiteral
     **<li>StringLiteral
     **<li>VariableAndSW
     **<li>CallOpt
     **<li>LoadOption_load_script
     **<li>LoadOption_loadprofile
     **<li>LoadOption_run_script
     **<li>SimpleOption_timer_begin
     **<li>SimpleOption_timer_end
     **<li>SimpleOption_pause
     **<li>SimpleOption_file
     **<li>SimpleOption_line
     **<li>SimpleOption_clear_fifo
     **<li>SimpleOption_beep
     **<li>SimpleOption_eject
     **<li>SimpleOption_insert
     **<li>SimpleOption_split
     **<li>SimpleOption_end
     **<li>SimpleOption_clear
     **<li>OnOffOption_on
     **<li>OnOffOption_off
     **<li>ParameterItem
     **<li>Mac_auto_mac_option
     **<li>Mac_auto_mac_option2
     **<li>LineEndOpt
     **<li>EmptyStatement0
     **<li>EmptyStatement1
     **</ul>
     **</b>
     **/
abstract class IASTNodeToken implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>SnooperProg
     **<li>SnooperSegmentItemList
     **</ul>
     **</b>
     **/
abstract class ISnooperProg implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>FunctionDecl
     **<li>IfThenStatement
     **<li>IfThenElseStatement
     **<li>VariableStmt
     **<li>DoLoopStmt
     **<li>ForStmt
     **<li>HforStmt
     **<li>ExpressionStmt
     **<li>ExitForStatement
     **<li>ExitHforStatement
     **<li>LoadScriptStmt
     **<li>KeyWordWithoutParameterStmt
     **<li>SleepStmt
     **<li>SetStmt_Identifier
     **<li>SetStmt_MacroName
     **<li>PrintStmt_Message
     **<li>PrintStmt_Quqstion
     **<li>AutoResponseStmt
     **<li>WriteFifoStmt_Identifier
     **<li>WriteFifoStmt_MacroName
     **<li>UploadStmt_upload
     **<li>UploadStmt_upload2
     **<li>ResetStmt_reset
     **<li>ResetStmt_reset2
     **<li>ResetStmt_reset_cold
     **<li>ResetStmt_reset2_cold
     **<li>InstallStmt_install
     **<li>InstallStmt_install_2
     **<li>JcopAuthStmt_jcop22_ext_auth
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc
     **<li>JcopAuthStmt_jcop22_ext_auth_2
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc_2
     **<li>JcopAuthStmt_jcop22_ext_auth_nonblock
     **<li>SelectStmt_select
     **<li>SelectStmt_select_2
     **<li>DeleteStmt_delete
     **<li>DeleteStmt_delete_2
     **<li>Apdu2Stmt
     **<li>PromptStmt
     **<li>ShowapduStmt
     **<li>Des_3des_mac_Stmt
     **<li>Full_3des_mac_Stmt
     **<li>Mac_auto_mac_Stmt
     **<li>SuperlongStmtInOneLine
     **<li>SuperlongStmtInMutipleLines
     **<li>CompareStmt
     **<li>Socket_messageStmt
     **<li>GenerateStmt
     **<li>SendtextStmt
     **<li>PushStmt
     **<li>GotoStmt
     **<li>EmptyStatement0
     **<li>EmptyStatement1
     **</ul>
     **</b>
     **/
abstract class ISnooperSegmentItem implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ReturnStmt</b>
     **/
abstract class IReturnStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **<li>ExclusiveOrExpression
     **<li>InclusiveOrExpression
     **<li>ConditionalAndExpression
     **<li>ConditionalOrExpression
     **</ul>
     **</b>
     **/
abstract class IExpressionOpt implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>SimpleName</b>
     **/
abstract class ISimpleNameOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>SimpleNameList</b>
     **/
abstract class IFunctionParameterListOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>CallSignature</b>
     **/
abstract class ICallSignatureOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>StatementList</b>
     **/
abstract class IBlockOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>IfSeg</b>
     **/
abstract class IIfSeg implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ElseIfStatementItemList</b>
     **/
abstract class IElseIfStatementOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ElseSeg</b>
     **/
abstract class IElseSeg implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ElseIfStatementItem</b>
     **/
abstract class IElseIfStatementItem implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>PrimaryAssignmentStmt
     **<li>ArrayAccessAssignmentStmt
     **<li>KeywordAssignmentStmt
     **<li>BadAssignment
     **</ul>
     **</b>
     **/
abstract class IVariableDecl implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ArrayAccesOnLeftSide</b>
     **/
abstract class IArrayAccesOnLeftSide implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>StepStmOpt</b>
     **/
abstract class IStepStmOpt implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>SimpleName
     **<li>NumberLiteral
     **</ul>
     **</b>
     **/
abstract class INextSegItem implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>NextSeg</b>
     **/
abstract class INextSeg implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>HnexSeg</b>
     **/
abstract class IHnexSeg implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **<li>NumberLiteral
     **<li>StringLiteral
     **<li>ArrayAccess
     **<li>HexMacroPrimary
     **<li>ApduDataWith3Lc
     **<li>ApduDataWith2Lc
     **<li>ApduDataWith4Lc
     **<li>ApduDataWithoutLc
     **<li>VariableAndSW
     **<li>FunctionCall
     **<li>Des_3des_mac_call
     **<li>Full_3des_mac_call
     **</ul>
     **</b>
     **/
abstract class IApduData implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ExpressionList</b>
     **/
abstract class IArgumentListOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **<li>PrimaryAssignmentStmt
     **<li>NumberLiteral
     **<li>StringLiteral
     **<li>VariableAndSW
     **<li>ParameterItem
     **</ul>
     **</b>
     **/
abstract class IInstallParameter implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>InstallParameterList</b>
     **/
abstract class IInstallParameterList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ParameterItemList</b>
     **/
abstract class IUtilFunctionParameterList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ApduDataList</b>
     **/
abstract class IMultipleLineApduDataList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>SnooperSegmentItemList</b>
     **/
abstract class ISnooperSegments implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>IfThenStatement
     **<li>IfThenElseStatement
     **<li>VariableStmt
     **<li>DoLoopStmt
     **<li>ForStmt
     **<li>HforStmt
     **<li>ExpressionStmt
     **<li>ExitForStatement
     **<li>ExitHforStatement
     **<li>LoadScriptStmt
     **<li>KeyWordWithoutParameterStmt
     **<li>SleepStmt
     **<li>SetStmt_Identifier
     **<li>SetStmt_MacroName
     **<li>PrintStmt_Message
     **<li>PrintStmt_Quqstion
     **<li>AutoResponseStmt
     **<li>WriteFifoStmt_Identifier
     **<li>WriteFifoStmt_MacroName
     **<li>UploadStmt_upload
     **<li>UploadStmt_upload2
     **<li>ResetStmt_reset
     **<li>ResetStmt_reset2
     **<li>ResetStmt_reset_cold
     **<li>ResetStmt_reset2_cold
     **<li>InstallStmt_install
     **<li>InstallStmt_install_2
     **<li>JcopAuthStmt_jcop22_ext_auth
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc
     **<li>JcopAuthStmt_jcop22_ext_auth_2
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc_2
     **<li>JcopAuthStmt_jcop22_ext_auth_nonblock
     **<li>SelectStmt_select
     **<li>SelectStmt_select_2
     **<li>DeleteStmt_delete
     **<li>DeleteStmt_delete_2
     **<li>Apdu2Stmt
     **<li>PromptStmt
     **<li>ShowapduStmt
     **<li>Des_3des_mac_Stmt
     **<li>Full_3des_mac_Stmt
     **<li>Mac_auto_mac_Stmt
     **<li>SuperlongStmtInOneLine
     **<li>SuperlongStmtInMutipleLines
     **<li>CompareStmt
     **<li>Socket_messageStmt
     **<li>GenerateStmt
     **<li>SendtextStmt
     **<li>PushStmt
     **<li>GotoStmt
     **<li>EmptyStatement0
     **<li>EmptyStatement1
     **</ul>
     **</b>
     **/
abstract class IStatement implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>FunctionDecl</b>
     **/
abstract class IFunctionDecl implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>SimpleName</b>
     **/
abstract class ISimpleName implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>SimpleNameList</b>
     **/
abstract class IFunctionParameterList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>CallSignature</b>
     **/
abstract class ICallSignature implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>StatementList</b>
     **/
abstract class IStatementList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>VariableStmt
     **<li>ExpressionStmt
     **<li>ExitForStatement
     **<li>ExitHforStatement
     **<li>LoadScriptStmt
     **<li>KeyWordWithoutParameterStmt
     **<li>SleepStmt
     **<li>SetStmt_Identifier
     **<li>SetStmt_MacroName
     **<li>PrintStmt_Message
     **<li>PrintStmt_Quqstion
     **<li>AutoResponseStmt
     **<li>WriteFifoStmt_Identifier
     **<li>WriteFifoStmt_MacroName
     **<li>UploadStmt_upload
     **<li>UploadStmt_upload2
     **<li>ResetStmt_reset
     **<li>ResetStmt_reset2
     **<li>ResetStmt_reset_cold
     **<li>ResetStmt_reset2_cold
     **<li>InstallStmt_install
     **<li>InstallStmt_install_2
     **<li>JcopAuthStmt_jcop22_ext_auth
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc
     **<li>JcopAuthStmt_jcop22_ext_auth_2
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc_2
     **<li>JcopAuthStmt_jcop22_ext_auth_nonblock
     **<li>SelectStmt_select
     **<li>SelectStmt_select_2
     **<li>DeleteStmt_delete
     **<li>DeleteStmt_delete_2
     **<li>Apdu2Stmt
     **<li>PromptStmt
     **<li>ShowapduStmt
     **<li>Des_3des_mac_Stmt
     **<li>Full_3des_mac_Stmt
     **<li>Mac_auto_mac_Stmt
     **<li>SuperlongStmtInOneLine
     **<li>SuperlongStmtInMutipleLines
     **<li>CompareStmt
     **<li>Socket_messageStmt
     **<li>GenerateStmt
     **<li>SendtextStmt
     **<li>PushStmt
     **<li>GotoStmt
     **<li>EmptyStatement0
     **<li>EmptyStatement1
     **</ul>
     **</b>
     **/
abstract class IStatementWithoutTrailingSubstatement implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>IfThenStatement</b>
     **/
abstract class IIfThenStatement implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>IfThenElseStatement</b>
     **/
abstract class IIfThenElseStatement implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>DoLoopStmt</b>
     **/
abstract class IDoLoopStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ForStmt</b>
     **/
abstract class IForStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>HforStmt</b>
     **/
abstract class IHforStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ExitForStatement
     **<li>ExitHforStatement
     **</ul>
     **</b>
     **/
abstract class IExitStatement implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>VariableStmt</b>
     **/
abstract class IVariableStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ExpressionStmt</b>
     **/
abstract class IExpressionStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>LoadScriptStmt</b>
     **/
abstract class ILoadScriptStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>KeyWordWithoutParameterStmt</b>
     **/
abstract class IKeyWordWithoutParameterStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>SleepStmt</b>
     **/
abstract class ISleepStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>SetStmt_Identifier
     **<li>SetStmt_MacroName
     **</ul>
     **</b>
     **/
abstract class ISetStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>PrintStmt_Message
     **<li>PrintStmt_Quqstion
     **</ul>
     **</b>
     **/
abstract class IPrintStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>AutoResponseStmt</b>
     **/
abstract class IAutoResponseStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>WriteFifoStmt_Identifier
     **<li>WriteFifoStmt_MacroName
     **</ul>
     **</b>
     **/
abstract class IWriteFifoStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>UploadStmt_upload
     **<li>UploadStmt_upload2
     **</ul>
     **</b>
     **/
abstract class IUploadStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ResetStmt_reset
     **<li>ResetStmt_reset2
     **<li>ResetStmt_reset_cold
     **<li>ResetStmt_reset2_cold
     **</ul>
     **</b>
     **/
abstract class IResetStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>InstallStmt_install
     **<li>InstallStmt_install_2
     **</ul>
     **</b>
     **/
abstract class IInstallStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>JcopAuthStmt_jcop22_ext_auth
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc
     **<li>JcopAuthStmt_jcop22_ext_auth_2
     **<li>JcopAuthStmt_jcop22_ext_auth_kmc_2
     **<li>JcopAuthStmt_jcop22_ext_auth_nonblock
     **</ul>
     **</b>
     **/
abstract class IJcopAuthStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>SelectStmt_select
     **<li>SelectStmt_select_2
     **</ul>
     **</b>
     **/
abstract class ISelectStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>DeleteStmt_delete
     **<li>DeleteStmt_delete_2
     **</ul>
     **</b>
     **/
abstract class IDeleteStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Apdu2Stmt</b>
     **/
abstract class IApdu2Stmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PromptStmt</b>
     **/
abstract class IPromptStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ShowapduStmt</b>
     **/
abstract class IShowapduStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Des_3des_mac_Stmt</b>
     **/
abstract class IDes_3des_mac_Stmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Full_3des_mac_Stmt</b>
     **/
abstract class IFull_3des_mac_Stmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Mac_auto_mac_Stmt</b>
     **/
abstract class IMac_auto_mac_Stmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>SuperlongStmtInOneLine
     **<li>SuperlongStmtInMutipleLines
     **</ul>
     **</b>
     **/
abstract class ISuperlongStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>CompareStmt</b>
     **/
abstract class ICompareStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Socket_messageStmt</b>
     **/
abstract class ISocket_messageStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>GenerateStmt</b>
     **/
abstract class IGenerateStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>SendtextStmt</b>
     **/
abstract class ISendtextStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PushStmt</b>
     **/
abstract class IPushStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>GotoStmt</b>
     **/
abstract class IGotoStmt implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>EmptyStatement0
     **<li>EmptyStatement1
     **</ul>
     **</b>
     **/
abstract class IEmptyStatement implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **<li>ExclusiveOrExpression
     **<li>InclusiveOrExpression
     **<li>ConditionalAndExpression
     **<li>ConditionalOrExpression
     **</ul>
     **</b>
     **/
abstract class IExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ElseIfStatementItemList</b>
     **/
abstract class IElseIfStatementList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **</ul>
     **</b>
     **/
abstract class IVariable implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>LetOpt</b>
     **/
abstract class ILetOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PrimaryAssignmentStmt</b>
     **/
abstract class IPrimaryAssignmentStmt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ArrayAccessAssignmentStmt</b>
     **/
abstract class IArrayAccessAssignmentStmt implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>NumberLiteral</b>
     **/
abstract class INumberLiteral implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **<li>NumberLiteral
     **<li>StringLiteral
     **<li>ArrayAccess
     **<li>HexMacroPrimary
     **<li>VariableAndSW
     **<li>FunctionCall
     **<li>Des_3des_mac_call
     **<li>Full_3des_mac_call
     **</ul>
     **</b>
     **/
abstract class IPrimary implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>StringLiteral</b>
     **/
abstract class IStringLiteral implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ArrayAccess</b>
     **/
abstract class IArrayAccess implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **<li>NumberLiteral
     **<li>ArrayAccess
     **<li>VariableAndSW
     **</ul>
     **</b>
     **/
abstract class IHexMacroAbleItem implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>FunctionCall
     **<li>Des_3des_mac_call
     **<li>Full_3des_mac_call
     **</ul>
     **</b>
     **/
abstract class IFunctionCall implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **<li>VariableAndSW
     **</ul>
     **</b>
     **/
abstract class IVariableAndSW implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ApduDataList</b>
     **/
abstract class IApduDataList implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **</ul>
     **</b>
     **/
abstract class IPostfixExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PostIncrementExpression</b>
     **/
abstract class IPostIncrementExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PostDecrementExpression</b>
     **/
abstract class IPostDecrementExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **</ul>
     **</b>
     **/
abstract class IUnaryExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PreIncrementExpression</b>
     **/
abstract class IPreIncrementExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>PreDecrementExpression</b>
     **/
abstract class IPreDecrementExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **</ul>
     **</b>
     **/
abstract class IUnaryExpressionNotPlusMinus implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **</ul>
     **</b>
     **/
abstract class IMultiplicativeExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **</ul>
     **</b>
     **/
abstract class IAdditiveExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **</ul>
     **</b>
     **/
abstract class IShiftExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **</ul>
     **</b>
     **/
abstract class IRelationalExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **</ul>
     **</b>
     **/
abstract class IEqualityExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **</ul>
     **</b>
     **/
abstract class IAndExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **<li>ExclusiveOrExpression
     **</ul>
     **</b>
     **/
abstract class IExclusiveOrExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **<li>ExclusiveOrExpression
     **<li>InclusiveOrExpression
     **</ul>
     **</b>
     **/
abstract class IInclusiveOrExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **<li>ExclusiveOrExpression
     **<li>InclusiveOrExpression
     **<li>ConditionalAndExpression
     **</ul>
     **</b>
     **/
abstract class IConditionalAndExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>ApduDataList
     **<li>PostIncrementExpression
     **<li>PostDecrementExpression
     **<li>PreIncrementExpression
     **<li>PreDecrementExpression
     **<li>UnaryExpNotPlusMinus_Xor
     **<li>UnaryExpNotPlusMinus_Not
     **<li>MultiplicativeExp_Divide
     **<li>MultiplicativeExp_Multiply
     **<li>MultiplicativeExp_Remainder
     **<li>AdditiveExp_Plus
     **<li>AdditiveExp_Minus
     **<li>ShiftExp_Left
     **<li>ShiftExp_Right
     **<li>RelationalExp_Less
     **<li>RelationalExp_Greater
     **<li>RelationalExp_LessEqual
     **<li>RelationalExp_GreaterEqual
     **<li>EqualityExpr_EqualEqual
     **<li>EqualityExpr_NotEqual
     **<li>AndExpression
     **<li>ExclusiveOrExpression
     **<li>InclusiveOrExpression
     **<li>ConditionalAndExpression
     **<li>ConditionalOrExpression
     **</ul>
     **</b>
     **/
abstract class IConditionalOrExpression implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>ExpressionList</b>
     **/
abstract class IArgumentList implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>CallOpt</b>
     **/
abstract class ICallOpt implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Des_3des_mac_call</b>
     **/
abstract class IDes_3des_mac_call implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by <b>Full_3des_mac_call</b>
     **/
abstract class IFull_3des_mac_call implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>LoadOption_load_script
     **<li>LoadOption_loadprofile
     **<li>LoadOption_run_script
     **</ul>
     **</b>
     **/
abstract class ILoadOption implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>SimpleOption_timer_begin
     **<li>SimpleOption_timer_end
     **<li>SimpleOption_pause
     **<li>SimpleOption_file
     **<li>SimpleOption_line
     **<li>SimpleOption_clear_fifo
     **<li>SimpleOption_beep
     **<li>SimpleOption_eject
     **<li>SimpleOption_insert
     **<li>SimpleOption_split
     **<li>SimpleOption_end
     **<li>SimpleOption_clear
     **</ul>
     **</b>
     **/
abstract class ISimpleOption implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>OnOffOption_on
     **<li>OnOffOption_off
     **</ul>
     **</b>
     **/
abstract class IOnOffOption implements IRootForsnooperParser    {
    }

    /***
     ** is implemented by:
     **<b>
     **<ul>
     **<li>Variable
     **<li>BadVariable
     **<li>NumberLiteral
     **<li>StringLiteral
     **<li>VariableAndSW
     **<li>ParameterItem
     **</ul>
     **</b>
     **/
abstract class IParameterItem implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by:
     **<b>
     **<ul>
     **<li>Mac_auto_mac_option
     **<li>Mac_auto_mac_option2
     **</ul>
     **</b>
     **/
abstract class IMac_auto_mac_option implements IRootForsnooperParser    {
    }

    /***
     ** is always implemented by <b>ASTNodeToken</b>. It is also implemented by <b>LineEndOpt</b>
     **/
abstract class ILineEndOpt implements IRootForsnooperParser    {
    }

abstract class ASTNode implements IAst
    {
        IAst? getNextAst(){ return null; }
         late IToken leftIToken ;
         late IToken rightIToken ;
         IAst? parent;
         void setParent(IAst p){ parent = p; }
         IAst? getParent(){ return parent; }
        int getRuleIndex(){ return 0; }

         IToken getLeftIToken()  { return leftIToken; }
         IToken getRightIToken()  { return rightIToken; }
          List<IToken> getPrecedingAdjuncts() { return leftIToken.getPrecedingAdjuncts(); }
          List<IToken> getFollowingAdjuncts() { return rightIToken.getFollowingAdjuncts(); }

        String  toString()  
        {
          var  lex = leftIToken.getILexStream();
          if( lex != null)
            return lex.toStringWithOffset(leftIToken.getStartOffset(), rightIToken.getEndOffset());
          return  '';
        }

    ASTNode(IToken leftIToken ,[ IToken? rightIToken ])
        {
            this.leftIToken = leftIToken;
            if(rightIToken != null) this.rightIToken = rightIToken;
            else            this.rightIToken = leftIToken;
        }

        void initialize(){}

        /**
         * A list of all children of this node, excluding the null ones.
         */
          ArrayList getChildren() 
        {
             var list = getAllChildren() ;
            var k = -1;
            for (var i = 0; i < list.size(); i++)
            {
                var element = list.get(i);
                if (null==element)
                {
                    if (++k != i)
                        list.set(k, element);
                }
            }
            for (var i = list.size() - 1; i > k; i--) // remove extraneous elements
                list.remove(i);
            return list;
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
         ArrayList getAllChildren() ;

          void acceptWithVisitor(Visitor v);
          void acceptWithArg(ArgumentVisitor v, Object? o);
         Object? acceptWithResult(ResultVisitor v);
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o);
         void accept(IAstVisitor v){}
    }

abstract class AbstractASTNodeList extends ASTNode implements IAbstractArrayList<ASTNode>
    {
         late bool leftRecursive  ;
          var list  =  ArrayList();
         int size()   { return list.size(); }
         ArrayList getList(){ return list; }
         ASTNode getElementAt(int i) { return list.get(leftRecursive ? i : list.size() - 1 - i); }
         ArrayList getArrayList()
        {
            if (! leftRecursive) // reverse the list 
            {
                for (var i = 0, n = list.size() - 1; i < n; i++, n--)
                {
                    var ith = list.get(i),
                           nth = list.get(n);
                    list.set(i, nth);
                    list.set(n, ith);
                }
                leftRecursive = true;
            }
            return list;
        }
        /**
         * @deprecated replaced by {@link #addElement()}
         *
         */
         bool add(ASTNode element)
        {
            addElement(element);
            return true;
        }

         void addElement(ASTNode element)
        {
            list.add(element);
            if (leftRecursive)
                 rightIToken = element.getRightIToken();
            else leftIToken = element.getLeftIToken();
        }

          AbstractASTNodeList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken){
              this.leftRecursive = leftRecursive;
        }

        /**
         * Make a copy of the list and return it. Note that we obtain the local list by
         * invoking getArrayList so as to make sure that the list we return is in proper order.
         */
            ArrayList getAllChildren() 
        {
            return getArrayList().clone();
        }

    }

class ASTNodeToken extends ASTNode implements IASTNodeToken
    {
        ASTNodeToken(IToken token   ):super(token){  }
         IToken getIToken()  { return leftIToken; }
         String toString(){ return leftIToken.toString(); }

        /**
         * A token class has no children. So, we return the empty list.
         */
            ArrayList getAllChildren()  { return  ArrayList(); }


          void acceptWithVisitor(Visitor v){ v.visitASTNodeToken(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitASTNodeToken(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitASTNodeToken(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitASTNodeToken(this, o); }
    }

/**
 *<b>
*<li>Rule 2:  SnooperProg ::= SnooperSegments
 *</b>
 */
class SnooperProg extends ASTNode implements ISnooperProg
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late SnooperSegmentItemList _SnooperSegments;

         SnooperSegmentItemList getSnooperSegments(){ return _SnooperSegments; }
         void setSnooperSegments(SnooperSegmentItemList _SnooperSegments){ this._SnooperSegments = _SnooperSegments; }

        SnooperProg(snooperParser environment, IToken leftIToken, IToken rightIToken,
                    SnooperSegmentItemList _SnooperSegments)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._SnooperSegments = _SnooperSegments;
            (_SnooperSegments as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _SnooperSegments)  list.add(_SnooperSegments);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSnooperProg(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSnooperProg(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSnooperProg(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSnooperProg(this, o); }
        @override
        int getRuleIndex() { return 2 ;}

    //#line 84 "snooperParser.g

        Scope? scope;
        FunctionSymbol? sym;
    }

/**
 *<b>
*<li>Rule 3:  SnooperSegments ::= SnooperSegmentItem
*<li>Rule 4:  SnooperSegments ::= SnooperSegments SnooperSegmentItem
 *</b>
 */
class SnooperSegmentItemList extends AbstractASTNodeList implements ISnooperSegments
    {
         ASTNode getSnooperSegmentItemAt(int i){ return getElementAt(i) as ASTNode; }

        SnooperSegmentItemList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static SnooperSegmentItemList SnooperSegmentItemListfromElement(ASTNode element,bool leftRecursive )
        {
            var obj = SnooperSegmentItemList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _SnooperSegmentItem)
        {
            super.addElement(_SnooperSegmentItem);
            _SnooperSegmentItem.setParent(this);
        }


        void acceptWithVisitor(Visitor v){ for (var i = 0; i < size(); i++) getSnooperSegmentItemAt(i).acceptWithVisitor(v); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) getSnooperSegmentItemAt(i).acceptWithArg(v, o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getSnooperSegmentItemAt(i).acceptWithResult(v));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getSnooperSegmentItemAt(i).acceptWithResultArgument(v, o));
            return result;
        }
        @override
        int getRuleIndex() { return 4 ;}
    }

/**
 *<b>
*<li>Rule 7:  ReturnStmt ::= return ExpressionOpt CRLF
 *</b>
 */
class ReturnStmt extends ASTNode implements IReturnStmt
    {
         late ASTNodeToken _return;
         late ASTNode? _ExpressionOpt;
         late ASTNodeToken _CRLF;

         ASTNodeToken getreturn(){ return _return; }
         void setreturn(ASTNodeToken _return){ this._return = _return; }
        /**
         * The value returned by <b>getExpressionOpt</b> may be <b>null</b>
         */
         ASTNode ?  getExpressionOpt(){ return _ExpressionOpt; }
         void setExpressionOpt(ASTNode _ExpressionOpt){ this._ExpressionOpt = _ExpressionOpt; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ReturnStmt(IToken leftIToken, IToken rightIToken,
                   ASTNodeToken _return,
                   ASTNode? _ExpressionOpt,
                   ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._return = _return;
            (_return as ASTNode).setParent(this);
            this._ExpressionOpt = _ExpressionOpt;
            if (null != _ExpressionOpt) (_ExpressionOpt as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _return)  list.add(_return);
            if(null != _ExpressionOpt)  list.add(_ExpressionOpt);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitReturnStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitReturnStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitReturnStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitReturnStmt(this, o); }
        @override
        int getRuleIndex() { return 7 ;}
    }

/**
 *<b>
*<li>Rule 10:  SimpleName ::= IDENTIFIER
 *</b>
 */
class SimpleName extends ASTNodeToken implements ISimpleName
    {
         IToken getIDENTIFIER(){ return leftIToken; }

    SimpleName(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleName(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleName(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleName(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleName(this, o); }
        @override
        int getRuleIndex() { return 10 ;}
    }

/**
 *<b>
*<li>Rule 11:  FunctionParameterList ::= SimpleName
*<li>Rule 12:  FunctionParameterList ::= FunctionParameterList , SimpleName
 *</b>
 */
class SimpleNameList extends AbstractASTNodeList implements IFunctionParameterList
    {
         SimpleName getSimpleNameAt(int i){ return getElementAt(i) as SimpleName; }

        SimpleNameList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static SimpleNameList SimpleNameListfromElement(SimpleName element,bool leftRecursive )
        {
            var obj = SimpleNameList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _SimpleName)
        {
            super.addElement(_SimpleName);
            _SimpleName.setParent(this);
        }


        void acceptWithVisitor(Visitor v)  { for (var i = 0; i < size(); i++) v.visit(getSimpleNameAt(i)); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) v.visit(getSimpleNameAt(i), o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(v.visit(getSimpleNameAt(i)));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o) 
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(v.visit(getSimpleNameAt(i), o));
            return result;
        }
        @override
        int getRuleIndex() { return 12 ;}
    }

/**
 *<b>
*<li>Rule 15:  CallSignature ::= ( FunctionParameterListOpt )
 *</b>
 */
class CallSignature extends ASTNode implements ICallSignature
    {
         late ASTNodeToken _LPAREN;
         late SimpleNameList? _FunctionParameterListOpt;
         late ASTNodeToken _RPAREN;

         ASTNodeToken getLPAREN(){ return _LPAREN; }
         void setLPAREN(ASTNodeToken _LPAREN){ this._LPAREN = _LPAREN; }
        /**
         * The value returned by <b>getFunctionParameterListOpt</b> may be <b>null</b>
         */
         SimpleNameList ?  getFunctionParameterListOpt(){ return _FunctionParameterListOpt; }
         void setFunctionParameterListOpt(SimpleNameList _FunctionParameterListOpt){ this._FunctionParameterListOpt = _FunctionParameterListOpt; }
         ASTNodeToken getRPAREN(){ return _RPAREN; }
         void setRPAREN(ASTNodeToken _RPAREN){ this._RPAREN = _RPAREN; }

        CallSignature(IToken leftIToken, IToken rightIToken,
                      ASTNodeToken _LPAREN,
                      SimpleNameList? _FunctionParameterListOpt,
                      ASTNodeToken _RPAREN)
            :super(leftIToken, rightIToken)

        {
            this._LPAREN = _LPAREN;
            (_LPAREN as ASTNode).setParent(this);
            this._FunctionParameterListOpt = _FunctionParameterListOpt;
            if (null != _FunctionParameterListOpt) (_FunctionParameterListOpt as ASTNode).setParent(this);
            this._RPAREN = _RPAREN;
            (_RPAREN as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _LPAREN)  list.add(_LPAREN);
            if(null != _FunctionParameterListOpt)  list.add(_FunctionParameterListOpt);
            if(null != _RPAREN)  list.add(_RPAREN);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitCallSignature(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitCallSignature(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitCallSignature(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitCallSignature(this, o); }
        @override
        int getRuleIndex() { return 15 ;}
    }

/**
 *<b>
*<li>Rule 18:  FunctionDecl ::= IDENTIFIER CallSignatureOpt : CRLF BlockOpt ReturnStmt
 *</b>
 */
class FunctionDecl extends ASTNode implements IFunctionDecl
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _IDENTIFIER;
         late CallSignature? _CallSignatureOpt;
         late ASTNodeToken _COLON;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;
         late ReturnStmt _ReturnStmt;

         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
        /**
         * The value returned by <b>getCallSignatureOpt</b> may be <b>null</b>
         */
         CallSignature ?  getCallSignatureOpt(){ return _CallSignatureOpt; }
         void setCallSignatureOpt(CallSignature _CallSignatureOpt){ this._CallSignatureOpt = _CallSignatureOpt; }
         ASTNodeToken getCOLON(){ return _COLON; }
         void setCOLON(ASTNodeToken _COLON){ this._COLON = _COLON; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }
         ReturnStmt getReturnStmt(){ return _ReturnStmt; }
         void setReturnStmt(ReturnStmt _ReturnStmt){ this._ReturnStmt = _ReturnStmt; }

        FunctionDecl(snooperParser environment, IToken leftIToken, IToken rightIToken,
                     ASTNodeToken _IDENTIFIER,
                     CallSignature? _CallSignatureOpt,
                     ASTNodeToken _COLON,
                     ASTNodeToken _CRLF,
                     StatementList? _BlockOpt,
                     ReturnStmt _ReturnStmt)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._CallSignatureOpt = _CallSignatureOpt;
            if (null != _CallSignatureOpt) (_CallSignatureOpt as ASTNode).setParent(this);
            this._COLON = _COLON;
            (_COLON as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            this._ReturnStmt = _ReturnStmt;
            (_ReturnStmt as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _CallSignatureOpt)  list.add(_CallSignatureOpt);
            if(null != _COLON)  list.add(_COLON);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            if(null != _ReturnStmt)  list.add(_ReturnStmt);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitFunctionDecl(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitFunctionDecl(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitFunctionDecl(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitFunctionDecl(this, o); }
        @override
        int getRuleIndex() { return 18 ;}

    //#line 110 "snooperParser.g

        Scope? scope;
        FunctionSymbol? sym;
        String name(){
            return getIDENTIFIER().toString();
        }
    }

/**
 *<b>
*<li>Rule 19:  StatementList ::= Statement
*<li>Rule 20:  StatementList ::= StatementList Statement
 *</b>
 */
class StatementList extends AbstractASTNodeList implements IStatementList
    {
         ASTNode getStatementAt(int i){ return getElementAt(i) as ASTNode; }

        StatementList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static StatementList StatementListfromElement(ASTNode element,bool leftRecursive )
        {
            var obj = StatementList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _Statement)
        {
            super.addElement(_Statement);
            _Statement.setParent(this);
        }


        void acceptWithVisitor(Visitor v){ for (var i = 0; i < size(); i++) getStatementAt(i).acceptWithVisitor(v); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) getStatementAt(i).acceptWithArg(v, o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getStatementAt(i).acceptWithResult(v));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getStatementAt(i).acceptWithResultArgument(v, o));
            return result;
        }
        @override
        int getRuleIndex() { return 20 ;}
    }

/**
 *<b>
*<li>Rule 19:  StatementList ::= Statement
*<li>Rule 20:  StatementList ::= StatementList Statement
 *</b>
 */
class StatementList_StatementList extends StatementList
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

        StatementList_StatementList(snooperParser environment, IToken leftIToken, IToken rightIToken, bool leftRecursive )
        :super(leftIToken, rightIToken, leftRecursive)
        {
            this.environment = environment;
            initialize();
        }

        static  StatementList_StatementList StatementList_StatementListfromElement(snooperParser environment, ASTNode element,bool leftRecursive )
        {
            var obj = StatementList_StatementList(environment,element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

        @override
        int getRuleIndex() { return 20 ;}

    //#line 120 "snooperParser.g

        Scope? scope2;

    }

/**
 *<b>
*<li>Rule 57:  IfSeg ::= if Expression CRLF BlockOpt
 *</b>
 */
class IfSeg extends ASTNode implements IIfSeg
    {
         late ASTNodeToken _if;
         late ASTNode _Expression;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;

         ASTNodeToken getif(){ return _if; }
         void setif(ASTNodeToken _if){ this._if = _if; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }

        IfSeg(IToken leftIToken, IToken rightIToken,
              ASTNodeToken _if,
              ASTNode _Expression,
              ASTNodeToken _CRLF,
              StatementList? _BlockOpt)
            :super(leftIToken, rightIToken)

        {
            this._if = _if;
            (_if as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _if)  list.add(_if);
            if(null != _Expression)  list.add(_Expression);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitIfSeg(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitIfSeg(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitIfSeg(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitIfSeg(this, o); }
        @override
        int getRuleIndex() { return 57 ;}
    }

/**
 *<b>
*<li>Rule 58:  IfThenStatement ::= IfSeg ElseIfStatementOpt endif CRLF
 *</b>
 */
class IfThenStatement extends ASTNode implements IIfThenStatement
    {
         late IfSeg _IfSeg;
         late ElseIfStatementItemList? _ElseIfStatementOpt;
         late ASTNodeToken _endif;
         late ASTNodeToken _CRLF;

         IfSeg getIfSeg(){ return _IfSeg; }
         void setIfSeg(IfSeg _IfSeg){ this._IfSeg = _IfSeg; }
        /**
         * The value returned by <b>getElseIfStatementOpt</b> may be <b>null</b>
         */
         ElseIfStatementItemList ?  getElseIfStatementOpt(){ return _ElseIfStatementOpt; }
         void setElseIfStatementOpt(ElseIfStatementItemList _ElseIfStatementOpt){ this._ElseIfStatementOpt = _ElseIfStatementOpt; }
         ASTNodeToken getendif(){ return _endif; }
         void setendif(ASTNodeToken _endif){ this._endif = _endif; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        IfThenStatement(IToken leftIToken, IToken rightIToken,
                        IfSeg _IfSeg,
                        ElseIfStatementItemList? _ElseIfStatementOpt,
                        ASTNodeToken _endif,
                        ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._IfSeg = _IfSeg;
            (_IfSeg as ASTNode).setParent(this);
            this._ElseIfStatementOpt = _ElseIfStatementOpt;
            if (null != _ElseIfStatementOpt) (_ElseIfStatementOpt as ASTNode).setParent(this);
            this._endif = _endif;
            (_endif as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _IfSeg)  list.add(_IfSeg);
            if(null != _ElseIfStatementOpt)  list.add(_ElseIfStatementOpt);
            if(null != _endif)  list.add(_endif);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitIfThenStatement(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitIfThenStatement(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitIfThenStatement(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitIfThenStatement(this, o); }
        @override
        int getRuleIndex() { return 58 ;}
    }

/**
 *<b>
*<li>Rule 59:  ElseSeg ::= else CRLF BlockOpt
 *</b>
 */
class ElseSeg extends ASTNode implements IElseSeg
    {
         late ASTNodeToken _else;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;

         ASTNodeToken getelse(){ return _else; }
         void setelse(ASTNodeToken _else){ this._else = _else; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }

        ElseSeg(IToken leftIToken, IToken rightIToken,
                ASTNodeToken _else,
                ASTNodeToken _CRLF,
                StatementList? _BlockOpt)
            :super(leftIToken, rightIToken)

        {
            this._else = _else;
            (_else as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _else)  list.add(_else);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitElseSeg(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitElseSeg(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitElseSeg(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitElseSeg(this, o); }
        @override
        int getRuleIndex() { return 59 ;}
    }

/**
 *<b>
*<li>Rule 60:  IfThenElseStatement ::= IfSeg ElseIfStatementOpt ElseSeg endif CRLF
 *</b>
 */
class IfThenElseStatement extends ASTNode implements IIfThenElseStatement
    {
         late IfSeg _IfSeg;
         late ElseIfStatementItemList? _ElseIfStatementOpt;
         late ElseSeg _ElseSeg;
         late ASTNodeToken _endif;
         late ASTNodeToken _CRLF;

         IfSeg getIfSeg(){ return _IfSeg; }
         void setIfSeg(IfSeg _IfSeg){ this._IfSeg = _IfSeg; }
        /**
         * The value returned by <b>getElseIfStatementOpt</b> may be <b>null</b>
         */
         ElseIfStatementItemList ?  getElseIfStatementOpt(){ return _ElseIfStatementOpt; }
         void setElseIfStatementOpt(ElseIfStatementItemList _ElseIfStatementOpt){ this._ElseIfStatementOpt = _ElseIfStatementOpt; }
         ElseSeg getElseSeg(){ return _ElseSeg; }
         void setElseSeg(ElseSeg _ElseSeg){ this._ElseSeg = _ElseSeg; }
         ASTNodeToken getendif(){ return _endif; }
         void setendif(ASTNodeToken _endif){ this._endif = _endif; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        IfThenElseStatement(IToken leftIToken, IToken rightIToken,
                            IfSeg _IfSeg,
                            ElseIfStatementItemList? _ElseIfStatementOpt,
                            ElseSeg _ElseSeg,
                            ASTNodeToken _endif,
                            ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._IfSeg = _IfSeg;
            (_IfSeg as ASTNode).setParent(this);
            this._ElseIfStatementOpt = _ElseIfStatementOpt;
            if (null != _ElseIfStatementOpt) (_ElseIfStatementOpt as ASTNode).setParent(this);
            this._ElseSeg = _ElseSeg;
            (_ElseSeg as ASTNode).setParent(this);
            this._endif = _endif;
            (_endif as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _IfSeg)  list.add(_IfSeg);
            if(null != _ElseIfStatementOpt)  list.add(_ElseIfStatementOpt);
            if(null != _ElseSeg)  list.add(_ElseSeg);
            if(null != _endif)  list.add(_endif);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitIfThenElseStatement(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitIfThenElseStatement(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitIfThenElseStatement(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitIfThenElseStatement(this, o); }
        @override
        int getRuleIndex() { return 60 ;}
    }

/**
 *<b>
*<li>Rule 63:  ElseIfStatementList ::= ElseIfStatementItem
*<li>Rule 64:  ElseIfStatementList ::= ElseIfStatementList ElseIfStatementItem
 *</b>
 */
class ElseIfStatementItemList extends AbstractASTNodeList implements IElseIfStatementList
    {
         ElseIfStatementItem getElseIfStatementItemAt(int i){ return getElementAt(i) as ElseIfStatementItem; }

        ElseIfStatementItemList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static ElseIfStatementItemList ElseIfStatementItemListfromElement(ElseIfStatementItem element,bool leftRecursive )
        {
            var obj = ElseIfStatementItemList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _ElseIfStatementItem)
        {
            super.addElement(_ElseIfStatementItem);
            _ElseIfStatementItem.setParent(this);
        }


        void acceptWithVisitor(Visitor v)  { for (var i = 0; i < size(); i++) v.visit(getElseIfStatementItemAt(i)); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) v.visit(getElseIfStatementItemAt(i), o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(v.visit(getElseIfStatementItemAt(i)));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o) 
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(v.visit(getElseIfStatementItemAt(i), o));
            return result;
        }
        @override
        int getRuleIndex() { return 64 ;}
    }

/**
 *<b>
*<li>Rule 65:  ElseIfStatementItem ::= else if Expression CRLF BlockOpt
 *</b>
 */
class ElseIfStatementItem extends ASTNode implements IElseIfStatementItem
    {
         late ASTNodeToken _else;
         late ASTNodeToken _if;
         late ASTNode _Expression;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;

         ASTNodeToken getelse(){ return _else; }
         void setelse(ASTNodeToken _else){ this._else = _else; }
         ASTNodeToken getif(){ return _if; }
         void setif(ASTNodeToken _if){ this._if = _if; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }

        ElseIfStatementItem(IToken leftIToken, IToken rightIToken,
                            ASTNodeToken _else,
                            ASTNodeToken _if,
                            ASTNode _Expression,
                            ASTNodeToken _CRLF,
                            StatementList? _BlockOpt)
            :super(leftIToken, rightIToken)

        {
            this._else = _else;
            (_else as ASTNode).setParent(this);
            this._if = _if;
            (_if as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _else)  list.add(_else);
            if(null != _if)  list.add(_if);
            if(null != _Expression)  list.add(_Expression);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitElseIfStatementItem(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitElseIfStatementItem(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitElseIfStatementItem(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitElseIfStatementItem(this, o); }
        @override
        int getRuleIndex() { return 65 ;}
    }

/**
 *<b>
*<li>Rule 68:  Variable ::= MACRO_IDENTIFIER
 *</b>
 */
class Variable extends ASTNodeToken implements IVariable
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         IToken getMACRO_IDENTIFIER(){ return leftIToken; }

    Variable(snooperParser environment, IToken token):super(token)        {
            this.environment = environment;
            initialize();
        }

          void acceptWithVisitor(Visitor v){ v.visitVariable(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitVariable(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitVariable(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitVariable(this, o); }
        @override
        int getRuleIndex() { return 68 ;}

    //#line 183 "snooperParser.g

        VarSymbol? sym;
    }

/**
 *<b>
*<li>Rule 69:  Variable ::= DollarSign IDENTIFIER
 *</b>
 */
class BadVariable extends ASTNode implements IVariable
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _DollarSign;
         late ASTNodeToken _IDENTIFIER;

         ASTNodeToken getDollarSign(){ return _DollarSign; }
         void setDollarSign(ASTNodeToken _DollarSign){ this._DollarSign = _DollarSign; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }

        BadVariable(snooperParser environment, IToken leftIToken, IToken rightIToken,
                    ASTNodeToken _DollarSign,
                    ASTNodeToken _IDENTIFIER)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._DollarSign = _DollarSign;
            (_DollarSign as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _DollarSign)  list.add(_DollarSign);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitBadVariable(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitBadVariable(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitBadVariable(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitBadVariable(this, o); }
        @override
        int getRuleIndex() { return 69 ;}

    //#line 188 "snooperParser.g

        VarSymbol? sym;
    }

/**
 *<em>
*<li>Rule 72:  LetOpt ::= %Empty
 *</em>
 *<p>
 *<b>
*<li>Rule 73:  LetOpt ::= let
 *</b>
 */
class LetOpt extends ASTNodeToken implements ILetOpt
    {
         IToken getlet(){ return leftIToken; }

    LetOpt(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitLetOpt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitLetOpt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitLetOpt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitLetOpt(this, o); }
        @override
        int getRuleIndex() { return 73 ;}
    }

/**
 *<b>
*<li>Rule 74:  VariableStmt ::= LetOpt VariableDecl CRLF
 *</b>
 */
class VariableStmt extends ASTNode implements IVariableStmt
    {
         late LetOpt? _LetOpt;
         late ASTNode _VariableDecl;
         late ASTNodeToken _CRLF;

        /**
         * The value returned by <b>getLetOpt</b> may be <b>null</b>
         */
         LetOpt ?  getLetOpt(){ return _LetOpt; }
         void setLetOpt(LetOpt _LetOpt){ this._LetOpt = _LetOpt; }
         ASTNode getVariableDecl(){ return _VariableDecl; }
         void setVariableDecl(ASTNode _VariableDecl){ this._VariableDecl = _VariableDecl; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        VariableStmt(IToken leftIToken, IToken rightIToken,
                     LetOpt? _LetOpt,
                     ASTNode _VariableDecl,
                     ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._LetOpt = _LetOpt;
            if (null != _LetOpt) (_LetOpt as ASTNode).setParent(this);
            this._VariableDecl = _VariableDecl;
            (_VariableDecl as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _LetOpt)  list.add(_LetOpt);
            if(null != _VariableDecl)  list.add(_VariableDecl);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitVariableStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitVariableStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitVariableStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitVariableStmt(this, o); }
        @override
        int getRuleIndex() { return 74 ;}
    }

/**
 *<b>
*<li>Rule 75:  PrimaryAssignmentStmt ::= IDENTIFIER = Expression
 *</b>
 */
class PrimaryAssignmentStmt extends ASTNode implements IPrimaryAssignmentStmt
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _EQUAL;
         late ASTNode _Expression;

         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getEQUAL(){ return _EQUAL; }
         void setEQUAL(ASTNodeToken _EQUAL){ this._EQUAL = _EQUAL; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }

        PrimaryAssignmentStmt(snooperParser environment, IToken leftIToken, IToken rightIToken,
                              ASTNodeToken _IDENTIFIER,
                              ASTNodeToken _EQUAL,
                              ASTNode _Expression)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._EQUAL = _EQUAL;
            (_EQUAL as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _EQUAL)  list.add(_EQUAL);
            if(null != _Expression)  list.add(_Expression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPrimaryAssignmentStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPrimaryAssignmentStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPrimaryAssignmentStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPrimaryAssignmentStmt(this, o); }
        @override
        int getRuleIndex() { return 75 ;}

    //#line 198 "snooperParser.g

        Scope? scope;
    }

/**
 *<b>
*<li>Rule 77:  ArrayAccesOnLeftSide ::= IDENTIFIER [ Expression ]
 *</b>
 */
class ArrayAccesOnLeftSide extends ASTNode implements IArrayAccesOnLeftSide
    {
         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _LBRACKET;
         late ASTNode _Expression;
         late ASTNodeToken _RBRACKET;

         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getLBRACKET(){ return _LBRACKET; }
         void setLBRACKET(ASTNodeToken _LBRACKET){ this._LBRACKET = _LBRACKET; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getRBRACKET(){ return _RBRACKET; }
         void setRBRACKET(ASTNodeToken _RBRACKET){ this._RBRACKET = _RBRACKET; }

        ArrayAccesOnLeftSide(IToken leftIToken, IToken rightIToken,
                             ASTNodeToken _IDENTIFIER,
                             ASTNodeToken _LBRACKET,
                             ASTNode _Expression,
                             ASTNodeToken _RBRACKET)
            :super(leftIToken, rightIToken)

        {
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._LBRACKET = _LBRACKET;
            (_LBRACKET as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._RBRACKET = _RBRACKET;
            (_RBRACKET as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _LBRACKET)  list.add(_LBRACKET);
            if(null != _Expression)  list.add(_Expression);
            if(null != _RBRACKET)  list.add(_RBRACKET);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitArrayAccesOnLeftSide(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitArrayAccesOnLeftSide(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitArrayAccesOnLeftSide(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitArrayAccesOnLeftSide(this, o); }
        @override
        int getRuleIndex() { return 77 ;}
    }

/**
 *<b>
*<li>Rule 78:  ArrayAccessAssignmentStmt ::= ArrayAccesOnLeftSide = Expression
 *</b>
 */
class ArrayAccessAssignmentStmt extends ASTNode implements IArrayAccessAssignmentStmt
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ArrayAccesOnLeftSide _ArrayAccesOnLeftSide;
         late ASTNodeToken _EQUAL;
         late ASTNode _Expression;

         ArrayAccesOnLeftSide getArrayAccesOnLeftSide(){ return _ArrayAccesOnLeftSide; }
         void setArrayAccesOnLeftSide(ArrayAccesOnLeftSide _ArrayAccesOnLeftSide){ this._ArrayAccesOnLeftSide = _ArrayAccesOnLeftSide; }
         ASTNodeToken getEQUAL(){ return _EQUAL; }
         void setEQUAL(ASTNodeToken _EQUAL){ this._EQUAL = _EQUAL; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }

        ArrayAccessAssignmentStmt(snooperParser environment, IToken leftIToken, IToken rightIToken,
                                  ArrayAccesOnLeftSide _ArrayAccesOnLeftSide,
                                  ASTNodeToken _EQUAL,
                                  ASTNode _Expression)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._ArrayAccesOnLeftSide = _ArrayAccesOnLeftSide;
            (_ArrayAccesOnLeftSide as ASTNode).setParent(this);
            this._EQUAL = _EQUAL;
            (_EQUAL as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _ArrayAccesOnLeftSide)  list.add(_ArrayAccesOnLeftSide);
            if(null != _EQUAL)  list.add(_EQUAL);
            if(null != _Expression)  list.add(_Expression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitArrayAccessAssignmentStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitArrayAccessAssignmentStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitArrayAccessAssignmentStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitArrayAccessAssignmentStmt(this, o); }
        @override
        int getRuleIndex() { return 78 ;}

    //#line 208 "snooperParser.g

        VarSymbol? sym;
    }

/**
 *<b>
*<li>Rule 80:  VariableDecl ::= sw = Expression
 *</b>
 */
class KeywordAssignmentStmt extends ASTNode implements IVariableDecl
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _sw;
         late ASTNodeToken _EQUAL;
         late ASTNode _Expression;

         ASTNodeToken getsw(){ return _sw; }
         void setsw(ASTNodeToken _sw){ this._sw = _sw; }
         ASTNodeToken getEQUAL(){ return _EQUAL; }
         void setEQUAL(ASTNodeToken _EQUAL){ this._EQUAL = _EQUAL; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }

        KeywordAssignmentStmt(snooperParser environment, IToken leftIToken, IToken rightIToken,
                              ASTNodeToken _sw,
                              ASTNodeToken _EQUAL,
                              ASTNode _Expression)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._sw = _sw;
            (_sw as ASTNode).setParent(this);
            this._EQUAL = _EQUAL;
            (_EQUAL as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _sw)  list.add(_sw);
            if(null != _EQUAL)  list.add(_EQUAL);
            if(null != _Expression)  list.add(_Expression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitKeywordAssignmentStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitKeywordAssignmentStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitKeywordAssignmentStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitKeywordAssignmentStmt(this, o); }
        @override
        int getRuleIndex() { return 80 ;}

    //#line 214 "snooperParser.g

         VarSymbol? sym;
    }

/**
 *<b>
*<li>Rule 81:  VariableDecl ::= IDENTIFIER =
 *</b>
 */
class BadAssignment extends ASTNode implements IVariableDecl
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _EQUAL;

         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getEQUAL(){ return _EQUAL; }
         void setEQUAL(ASTNodeToken _EQUAL){ this._EQUAL = _EQUAL; }

        BadAssignment(snooperParser environment, IToken leftIToken, IToken rightIToken,
                      ASTNodeToken _IDENTIFIER,
                      ASTNodeToken _EQUAL)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._EQUAL = _EQUAL;
            (_EQUAL as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _EQUAL)  list.add(_EQUAL);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitBadAssignment(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitBadAssignment(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitBadAssignment(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitBadAssignment(this, o); }
        @override
        int getRuleIndex() { return 81 ;}

    //#line 218 "snooperParser.g

        VarSymbol? sym;
    }

/**
 *<b>
*<li>Rule 82:  DoLoopStmt ::= do ExpressionOpt CRLF BlockOpt loop
 *</b>
 */
class DoLoopStmt extends ASTNode implements IDoLoopStmt
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _do;
         late ASTNode? _ExpressionOpt;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;
         late ASTNodeToken _loop;

         ASTNodeToken getdo(){ return _do; }
         void setdo(ASTNodeToken _do){ this._do = _do; }
        /**
         * The value returned by <b>getExpressionOpt</b> may be <b>null</b>
         */
         ASTNode ?  getExpressionOpt(){ return _ExpressionOpt; }
         void setExpressionOpt(ASTNode _ExpressionOpt){ this._ExpressionOpt = _ExpressionOpt; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }
         ASTNodeToken getloop(){ return _loop; }
         void setloop(ASTNodeToken _loop){ this._loop = _loop; }

        DoLoopStmt(snooperParser environment, IToken leftIToken, IToken rightIToken,
                   ASTNodeToken _do,
                   ASTNode? _ExpressionOpt,
                   ASTNodeToken _CRLF,
                   StatementList? _BlockOpt,
                   ASTNodeToken _loop)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._do = _do;
            (_do as ASTNode).setParent(this);
            this._ExpressionOpt = _ExpressionOpt;
            if (null != _ExpressionOpt) (_ExpressionOpt as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            this._loop = _loop;
            (_loop as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _do)  list.add(_do);
            if(null != _ExpressionOpt)  list.add(_ExpressionOpt);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            if(null != _loop)  list.add(_loop);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitDoLoopStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitDoLoopStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitDoLoopStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitDoLoopStmt(this, o); }
        @override
        int getRuleIndex() { return 82 ;}

    //#line 223 "snooperParser.g

        Scope? scope;
    }

/**
 *<em>
*<li>Rule 83:  StepStmOpt ::= %Empty
 *</em>
 *<p>
 *<b>
*<li>Rule 84:  StepStmOpt ::= step Expression
 *</b>
 */
class StepStmOpt extends ASTNode implements IStepStmOpt
    {
         late ASTNodeToken _step;
         late ASTNode _Expression;

         ASTNodeToken getstep(){ return _step; }
         void setstep(ASTNodeToken _step){ this._step = _step; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }

        StepStmOpt(IToken leftIToken, IToken rightIToken,
                   ASTNodeToken _step,
                   ASTNode _Expression)
            :super(leftIToken, rightIToken)

        {
            this._step = _step;
            (_step as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _step)  list.add(_step);
            if(null != _Expression)  list.add(_Expression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitStepStmOpt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitStepStmOpt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitStepStmOpt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitStepStmOpt(this, o); }
        @override
        int getRuleIndex() { return 84 ;}
    }

/**
 *<b>
*<li>Rule 87:  ForStmt ::= for VariableDecl to Primary StepStmOpt CRLF BlockOpt NextSeg
 *</b>
 */
class ForStmt extends ASTNode implements IForStmt
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _for;
         late ASTNode _VariableDecl;
         late ASTNodeToken _to;
         late ASTNode _Primary;
         late StepStmOpt? _StepStmOpt;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;
         late NextSeg _NextSeg;

         ASTNodeToken getfor(){ return _for; }
         void setfor(ASTNodeToken _for){ this._for = _for; }
         ASTNode getVariableDecl(){ return _VariableDecl; }
         void setVariableDecl(ASTNode _VariableDecl){ this._VariableDecl = _VariableDecl; }
         ASTNodeToken getto(){ return _to; }
         void setto(ASTNodeToken _to){ this._to = _to; }
         ASTNode getPrimary(){ return _Primary; }
         void setPrimary(ASTNode _Primary){ this._Primary = _Primary; }
        /**
         * The value returned by <b>getStepStmOpt</b> may be <b>null</b>
         */
         StepStmOpt ?  getStepStmOpt(){ return _StepStmOpt; }
         void setStepStmOpt(StepStmOpt _StepStmOpt){ this._StepStmOpt = _StepStmOpt; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }
         NextSeg getNextSeg(){ return _NextSeg; }
         void setNextSeg(NextSeg _NextSeg){ this._NextSeg = _NextSeg; }

        ForStmt(snooperParser environment, IToken leftIToken, IToken rightIToken,
                ASTNodeToken _for,
                ASTNode _VariableDecl,
                ASTNodeToken _to,
                ASTNode _Primary,
                StepStmOpt? _StepStmOpt,
                ASTNodeToken _CRLF,
                StatementList? _BlockOpt,
                NextSeg _NextSeg)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._for = _for;
            (_for as ASTNode).setParent(this);
            this._VariableDecl = _VariableDecl;
            (_VariableDecl as ASTNode).setParent(this);
            this._to = _to;
            (_to as ASTNode).setParent(this);
            this._Primary = _Primary;
            (_Primary as ASTNode).setParent(this);
            this._StepStmOpt = _StepStmOpt;
            if (null != _StepStmOpt) (_StepStmOpt as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            this._NextSeg = _NextSeg;
            (_NextSeg as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _for)  list.add(_for);
            if(null != _VariableDecl)  list.add(_VariableDecl);
            if(null != _to)  list.add(_to);
            if(null != _Primary)  list.add(_Primary);
            if(null != _StepStmOpt)  list.add(_StepStmOpt);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            if(null != _NextSeg)  list.add(_NextSeg);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitForStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitForStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitForStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitForStmt(this, o); }
        @override
        int getRuleIndex() { return 87 ;}

    //#line 232 "snooperParser.g

        Scope? scope;
    }

/**
 *<b>
*<li>Rule 88:  NextSeg ::= next NextSegItem CRLF
 *</b>
 */
class NextSeg extends ASTNode implements INextSeg
    {
         late ASTNodeToken _next;
         late ASTNode _NextSegItem;
         late ASTNodeToken _CRLF;

         ASTNodeToken getnext(){ return _next; }
         void setnext(ASTNodeToken _next){ this._next = _next; }
         ASTNode getNextSegItem(){ return _NextSegItem; }
         void setNextSegItem(ASTNode _NextSegItem){ this._NextSegItem = _NextSegItem; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        NextSeg(IToken leftIToken, IToken rightIToken,
                ASTNodeToken _next,
                ASTNode _NextSegItem,
                ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._next = _next;
            (_next as ASTNode).setParent(this);
            this._NextSegItem = _NextSegItem;
            (_NextSegItem as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _next)  list.add(_next);
            if(null != _NextSegItem)  list.add(_NextSegItem);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitNextSeg(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitNextSeg(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitNextSeg(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitNextSeg(this, o); }
        @override
        int getRuleIndex() { return 88 ;}
    }

/**
 *<b>
*<li>Rule 89:  HforStmt ::= hfor VariableDecl to Primary StepStmOpt CRLF BlockOpt HnexSeg
 *</b>
 */
class HforStmt extends ASTNode implements IHforStmt
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late ASTNodeToken _hfor;
         late ASTNode _VariableDecl;
         late ASTNodeToken _to;
         late ASTNode _Primary;
         late StepStmOpt? _StepStmOpt;
         late ASTNodeToken _CRLF;
         late StatementList? _BlockOpt;
         late HnexSeg _HnexSeg;

         ASTNodeToken gethfor(){ return _hfor; }
         void sethfor(ASTNodeToken _hfor){ this._hfor = _hfor; }
         ASTNode getVariableDecl(){ return _VariableDecl; }
         void setVariableDecl(ASTNode _VariableDecl){ this._VariableDecl = _VariableDecl; }
         ASTNodeToken getto(){ return _to; }
         void setto(ASTNodeToken _to){ this._to = _to; }
         ASTNode getPrimary(){ return _Primary; }
         void setPrimary(ASTNode _Primary){ this._Primary = _Primary; }
        /**
         * The value returned by <b>getStepStmOpt</b> may be <b>null</b>
         */
         StepStmOpt ?  getStepStmOpt(){ return _StepStmOpt; }
         void setStepStmOpt(StepStmOpt _StepStmOpt){ this._StepStmOpt = _StepStmOpt; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }
        /**
         * The value returned by <b>getBlockOpt</b> may be <b>null</b>
         */
         StatementList ?  getBlockOpt(){ return _BlockOpt; }
         void setBlockOpt(StatementList _BlockOpt){ this._BlockOpt = _BlockOpt; }
         HnexSeg getHnexSeg(){ return _HnexSeg; }
         void setHnexSeg(HnexSeg _HnexSeg){ this._HnexSeg = _HnexSeg; }

        HforStmt(snooperParser environment, IToken leftIToken, IToken rightIToken,
                 ASTNodeToken _hfor,
                 ASTNode _VariableDecl,
                 ASTNodeToken _to,
                 ASTNode _Primary,
                 StepStmOpt? _StepStmOpt,
                 ASTNodeToken _CRLF,
                 StatementList? _BlockOpt,
                 HnexSeg _HnexSeg)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._hfor = _hfor;
            (_hfor as ASTNode).setParent(this);
            this._VariableDecl = _VariableDecl;
            (_VariableDecl as ASTNode).setParent(this);
            this._to = _to;
            (_to as ASTNode).setParent(this);
            this._Primary = _Primary;
            (_Primary as ASTNode).setParent(this);
            this._StepStmOpt = _StepStmOpt;
            if (null != _StepStmOpt) (_StepStmOpt as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            this._BlockOpt = _BlockOpt;
            if (null != _BlockOpt) (_BlockOpt as ASTNode).setParent(this);
            this._HnexSeg = _HnexSeg;
            (_HnexSeg as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _hfor)  list.add(_hfor);
            if(null != _VariableDecl)  list.add(_VariableDecl);
            if(null != _to)  list.add(_to);
            if(null != _Primary)  list.add(_Primary);
            if(null != _StepStmOpt)  list.add(_StepStmOpt);
            if(null != _CRLF)  list.add(_CRLF);
            if(null != _BlockOpt)  list.add(_BlockOpt);
            if(null != _HnexSeg)  list.add(_HnexSeg);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitHforStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitHforStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitHforStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitHforStmt(this, o); }
        @override
        int getRuleIndex() { return 89 ;}

    //#line 239 "snooperParser.g

        Scope? scope;
    }

/**
 *<b>
*<li>Rule 90:  HnexSeg ::= hnext NextSegItem CRLF
 *</b>
 */
class HnexSeg extends ASTNode implements IHnexSeg
    {
         late ASTNodeToken _hnext;
         late ASTNode _NextSegItem;
         late ASTNodeToken _CRLF;

         ASTNodeToken gethnext(){ return _hnext; }
         void sethnext(ASTNodeToken _hnext){ this._hnext = _hnext; }
         ASTNode getNextSegItem(){ return _NextSegItem; }
         void setNextSegItem(ASTNode _NextSegItem){ this._NextSegItem = _NextSegItem; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        HnexSeg(IToken leftIToken, IToken rightIToken,
                ASTNodeToken _hnext,
                ASTNode _NextSegItem,
                ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._hnext = _hnext;
            (_hnext as ASTNode).setParent(this);
            this._NextSegItem = _NextSegItem;
            (_NextSegItem as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _hnext)  list.add(_hnext);
            if(null != _NextSegItem)  list.add(_NextSegItem);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitHnexSeg(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitHnexSeg(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitHnexSeg(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitHnexSeg(this, o); }
        @override
        int getRuleIndex() { return 90 ;}
    }

/**
 *<b>
*<li>Rule 91:  NumberLiteral ::= NUMBER
 *</b>
 */
class NumberLiteral extends ASTNodeToken implements INumberLiteral
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         IToken getNUMBER(){ return leftIToken; }

    NumberLiteral(snooperParser environment, IToken token):super(token)        {
            this.environment = environment;
            initialize();
        }

          void acceptWithVisitor(Visitor v){ v.visitNumberLiteral(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitNumberLiteral(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitNumberLiteral(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitNumberLiteral(this, o); }
        @override
        int getRuleIndex() { return 91 ;}

    //#line 247 "snooperParser.g

        Uint8List? value;
    }

/**
 *<b>
*<li>Rule 92:  StringLiteral ::= STRING_LITERAL
 *</b>
 */
class StringLiteral extends ASTNodeToken implements IStringLiteral
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         IToken getSTRING_LITERAL(){ return leftIToken; }

    StringLiteral(snooperParser environment, IToken token):super(token)        {
            this.environment = environment;
            initialize();
        }

          void acceptWithVisitor(Visitor v){ v.visitStringLiteral(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitStringLiteral(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitStringLiteral(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitStringLiteral(this, o); }
        @override
        int getRuleIndex() { return 92 ;}

    //#line 252 "snooperParser.g

        Uint8List? value;
    }

/**
 *<b>
*<li>Rule 93:  ArrayAccess ::= Variable [ Expression ]
 *</b>
 */
class ArrayAccess extends ASTNode implements IArrayAccess
    {
         late ASTNode _Variable;
         late ASTNodeToken _LBRACKET;
         late ASTNode _Expression;
         late ASTNodeToken _RBRACKET;

         ASTNode getVariable(){ return _Variable; }
         void setVariable(ASTNode _Variable){ this._Variable = _Variable; }
         ASTNodeToken getLBRACKET(){ return _LBRACKET; }
         void setLBRACKET(ASTNodeToken _LBRACKET){ this._LBRACKET = _LBRACKET; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getRBRACKET(){ return _RBRACKET; }
         void setRBRACKET(ASTNodeToken _RBRACKET){ this._RBRACKET = _RBRACKET; }

        ArrayAccess(IToken leftIToken, IToken rightIToken,
                    ASTNode _Variable,
                    ASTNodeToken _LBRACKET,
                    ASTNode _Expression,
                    ASTNodeToken _RBRACKET)
            :super(leftIToken, rightIToken)

        {
            this._Variable = _Variable;
            (_Variable as ASTNode).setParent(this);
            this._LBRACKET = _LBRACKET;
            (_LBRACKET as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._RBRACKET = _RBRACKET;
            (_RBRACKET as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _Variable)  list.add(_Variable);
            if(null != _LBRACKET)  list.add(_LBRACKET);
            if(null != _Expression)  list.add(_Expression);
            if(null != _RBRACKET)  list.add(_RBRACKET);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitArrayAccess(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitArrayAccess(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitArrayAccess(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitArrayAccess(this, o); }
        @override
        int getRuleIndex() { return 93 ;}
    }

/**
 *<b>
*<li>Rule 95:  Primary ::= HEX_MACRO_PREFIX HexMacroAbleItem
 *</b>
 */
class HexMacroPrimary extends ASTNode implements IPrimary
    {
         late ASTNodeToken _HEX_MACRO_PREFIX;
         late ASTNode _HexMacroAbleItem;

         ASTNodeToken getHEX_MACRO_PREFIX(){ return _HEX_MACRO_PREFIX; }
         void setHEX_MACRO_PREFIX(ASTNodeToken _HEX_MACRO_PREFIX){ this._HEX_MACRO_PREFIX = _HEX_MACRO_PREFIX; }
         ASTNode getHexMacroAbleItem(){ return _HexMacroAbleItem; }
         void setHexMacroAbleItem(ASTNode _HexMacroAbleItem){ this._HexMacroAbleItem = _HexMacroAbleItem; }

        HexMacroPrimary(IToken leftIToken, IToken rightIToken,
                        ASTNodeToken _HEX_MACRO_PREFIX,
                        ASTNode _HexMacroAbleItem)
            :super(leftIToken, rightIToken)

        {
            this._HEX_MACRO_PREFIX = _HEX_MACRO_PREFIX;
            (_HEX_MACRO_PREFIX as ASTNode).setParent(this);
            this._HexMacroAbleItem = _HexMacroAbleItem;
            (_HexMacroAbleItem as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _HEX_MACRO_PREFIX)  list.add(_HEX_MACRO_PREFIX);
            if(null != _HexMacroAbleItem)  list.add(_HexMacroAbleItem);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitHexMacroPrimary(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitHexMacroPrimary(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitHexMacroPrimary(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitHexMacroPrimary(this, o); }
        @override
        int getRuleIndex() { return 95 ;}
    }

/**
 *<b>
*<li>Rule 101:  ApduData ::= { ApduDataList }
 *</b>
 */
class ApduDataWith3Lc extends ASTNode implements IApduData
    {
         late ASTNodeToken _LBRACE;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _RBRACE;

         ASTNodeToken getLBRACE(){ return _LBRACE; }
         void setLBRACE(ASTNodeToken _LBRACE){ this._LBRACE = _LBRACE; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getRBRACE(){ return _RBRACE; }
         void setRBRACE(ASTNodeToken _RBRACE){ this._RBRACE = _RBRACE; }

        ApduDataWith3Lc(IToken leftIToken, IToken rightIToken,
                        ASTNodeToken _LBRACE,
                        ApduDataList _ApduDataList,
                        ASTNodeToken _RBRACE)
            :super(leftIToken, rightIToken)

        {
            this._LBRACE = _LBRACE;
            (_LBRACE as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._RBRACE = _RBRACE;
            (_RBRACE as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _LBRACE)  list.add(_LBRACE);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _RBRACE)  list.add(_RBRACE);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitApduDataWith3Lc(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitApduDataWith3Lc(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitApduDataWith3Lc(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitApduDataWith3Lc(this, o); }
        @override
        int getRuleIndex() { return 101 ;}
    }

/**
 *<b>
*<li>Rule 102:  ApduData ::= ( ApduDataList )
 *</b>
 */
class ApduDataWith2Lc extends ASTNode implements IApduData
    {
         late ASTNodeToken _LPAREN;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _RPAREN;

         ASTNodeToken getLPAREN(){ return _LPAREN; }
         void setLPAREN(ASTNodeToken _LPAREN){ this._LPAREN = _LPAREN; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getRPAREN(){ return _RPAREN; }
         void setRPAREN(ASTNodeToken _RPAREN){ this._RPAREN = _RPAREN; }

        ApduDataWith2Lc(IToken leftIToken, IToken rightIToken,
                        ASTNodeToken _LPAREN,
                        ApduDataList _ApduDataList,
                        ASTNodeToken _RPAREN)
            :super(leftIToken, rightIToken)

        {
            this._LPAREN = _LPAREN;
            (_LPAREN as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._RPAREN = _RPAREN;
            (_RPAREN as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _LPAREN)  list.add(_LPAREN);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _RPAREN)  list.add(_RPAREN);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitApduDataWith2Lc(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitApduDataWith2Lc(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitApduDataWith2Lc(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitApduDataWith2Lc(this, o); }
        @override
        int getRuleIndex() { return 102 ;}
    }

/**
 *<b>
*<li>Rule 103:  ApduData ::= < ApduDataList >
 *</b>
 */
class ApduDataWith4Lc extends ASTNode implements IApduData
    {
         late ASTNodeToken _LESS;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _GREATER;

         ASTNodeToken getLESS(){ return _LESS; }
         void setLESS(ASTNodeToken _LESS){ this._LESS = _LESS; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getGREATER(){ return _GREATER; }
         void setGREATER(ASTNodeToken _GREATER){ this._GREATER = _GREATER; }

        ApduDataWith4Lc(IToken leftIToken, IToken rightIToken,
                        ASTNodeToken _LESS,
                        ApduDataList _ApduDataList,
                        ASTNodeToken _GREATER)
            :super(leftIToken, rightIToken)

        {
            this._LESS = _LESS;
            (_LESS as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._GREATER = _GREATER;
            (_GREATER as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _LESS)  list.add(_LESS);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _GREATER)  list.add(_GREATER);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitApduDataWith4Lc(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitApduDataWith4Lc(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitApduDataWith4Lc(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitApduDataWith4Lc(this, o); }
        @override
        int getRuleIndex() { return 103 ;}
    }

/**
 *<b>
*<li>Rule 104:  ApduData ::= Primary
 *</b>
 */
class ApduDataWithoutLc extends ASTNode implements IApduData
    {
         late ASTNode _Primary;

         ASTNode getPrimary(){ return _Primary; }
         void setPrimary(ASTNode _Primary){ this._Primary = _Primary; }

        ApduDataWithoutLc(IToken leftIToken, IToken rightIToken,
                          ASTNode _Primary)
            :super(leftIToken, rightIToken)

        {
            this._Primary = _Primary;
            (_Primary as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _Primary)  list.add(_Primary);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitApduDataWithoutLc(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitApduDataWithoutLc(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitApduDataWithoutLc(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitApduDataWithoutLc(this, o); }
        @override
        int getRuleIndex() { return 104 ;}
    }

/**
 *<b>
*<li>Rule 105:  ApduDataList ::= ApduData
*<li>Rule 106:  ApduDataList ::= ApduDataList ApduData
*<li>Rule 232:  MultipleLineApduDataList ::= ApduData CRLF
*<li>Rule 233:  MultipleLineApduDataList ::= MultipleLineApduDataList ApduData CRLF
 *</b>
 */
class ApduDataList extends AbstractASTNodeList implements IApduDataList, IMultipleLineApduDataList
    {
         ASTNode getApduDataAt(int i){ return getElementAt(i) as ASTNode; }

        ApduDataList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static ApduDataList ApduDataListfromElement(ASTNode element,bool leftRecursive )
        {
            var obj = ApduDataList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _ApduData)
        {
            super.addElement(_ApduData);
            _ApduData.setParent(this);
        }


        void acceptWithVisitor(Visitor v){ for (var i = 0; i < size(); i++) getApduDataAt(i).acceptWithVisitor(v); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) getApduDataAt(i).acceptWithArg(v, o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getApduDataAt(i).acceptWithResult(v));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getApduDataAt(i).acceptWithResultArgument(v, o));
            return result;
        }
        @override
        int getRuleIndex() { return 233 ;}
    }

/**
 *<b>
*<li>Rule 110:  PostIncrementExpression ::= PostfixExpression ++
 *</b>
 */
class PostIncrementExpression extends ASTNode implements IPostIncrementExpression
    {
         late ASTNode _PostfixExpression;
         late ASTNodeToken _PLUS_PLUS;

         ASTNode getPostfixExpression(){ return _PostfixExpression; }
         void setPostfixExpression(ASTNode _PostfixExpression){ this._PostfixExpression = _PostfixExpression; }
         ASTNodeToken getPLUS_PLUS(){ return _PLUS_PLUS; }
         void setPLUS_PLUS(ASTNodeToken _PLUS_PLUS){ this._PLUS_PLUS = _PLUS_PLUS; }

        PostIncrementExpression(IToken leftIToken, IToken rightIToken,
                                ASTNode _PostfixExpression,
                                ASTNodeToken _PLUS_PLUS)
            :super(leftIToken, rightIToken)

        {
            this._PostfixExpression = _PostfixExpression;
            (_PostfixExpression as ASTNode).setParent(this);
            this._PLUS_PLUS = _PLUS_PLUS;
            (_PLUS_PLUS as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _PostfixExpression)  list.add(_PostfixExpression);
            if(null != _PLUS_PLUS)  list.add(_PLUS_PLUS);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPostIncrementExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPostIncrementExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPostIncrementExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPostIncrementExpression(this, o); }
        @override
        int getRuleIndex() { return 110 ;}
    }

/**
 *<b>
*<li>Rule 111:  PostDecrementExpression ::= PostfixExpression --
 *</b>
 */
class PostDecrementExpression extends ASTNode implements IPostDecrementExpression
    {
         late ASTNode _PostfixExpression;
         late ASTNodeToken _MINUS_MINUS;

         ASTNode getPostfixExpression(){ return _PostfixExpression; }
         void setPostfixExpression(ASTNode _PostfixExpression){ this._PostfixExpression = _PostfixExpression; }
         ASTNodeToken getMINUS_MINUS(){ return _MINUS_MINUS; }
         void setMINUS_MINUS(ASTNodeToken _MINUS_MINUS){ this._MINUS_MINUS = _MINUS_MINUS; }

        PostDecrementExpression(IToken leftIToken, IToken rightIToken,
                                ASTNode _PostfixExpression,
                                ASTNodeToken _MINUS_MINUS)
            :super(leftIToken, rightIToken)

        {
            this._PostfixExpression = _PostfixExpression;
            (_PostfixExpression as ASTNode).setParent(this);
            this._MINUS_MINUS = _MINUS_MINUS;
            (_MINUS_MINUS as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _PostfixExpression)  list.add(_PostfixExpression);
            if(null != _MINUS_MINUS)  list.add(_MINUS_MINUS);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPostDecrementExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPostDecrementExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPostDecrementExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPostDecrementExpression(this, o); }
        @override
        int getRuleIndex() { return 111 ;}
    }

/**
 *<b>
*<li>Rule 115:  PreIncrementExpression ::= ++ UnaryExpression
 *</b>
 */
class PreIncrementExpression extends ASTNode implements IPreIncrementExpression
    {
         late ASTNodeToken _PLUS_PLUS;
         late ASTNode _UnaryExpression;

         ASTNodeToken getPLUS_PLUS(){ return _PLUS_PLUS; }
         void setPLUS_PLUS(ASTNodeToken _PLUS_PLUS){ this._PLUS_PLUS = _PLUS_PLUS; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        PreIncrementExpression(IToken leftIToken, IToken rightIToken,
                               ASTNodeToken _PLUS_PLUS,
                               ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._PLUS_PLUS = _PLUS_PLUS;
            (_PLUS_PLUS as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _PLUS_PLUS)  list.add(_PLUS_PLUS);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPreIncrementExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPreIncrementExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPreIncrementExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPreIncrementExpression(this, o); }
        @override
        int getRuleIndex() { return 115 ;}
    }

/**
 *<b>
*<li>Rule 116:  PreDecrementExpression ::= -- UnaryExpression
 *</b>
 */
class PreDecrementExpression extends ASTNode implements IPreDecrementExpression
    {
         late ASTNodeToken _MINUS_MINUS;
         late ASTNode _UnaryExpression;

         ASTNodeToken getMINUS_MINUS(){ return _MINUS_MINUS; }
         void setMINUS_MINUS(ASTNodeToken _MINUS_MINUS){ this._MINUS_MINUS = _MINUS_MINUS; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        PreDecrementExpression(IToken leftIToken, IToken rightIToken,
                               ASTNodeToken _MINUS_MINUS,
                               ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._MINUS_MINUS = _MINUS_MINUS;
            (_MINUS_MINUS as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _MINUS_MINUS)  list.add(_MINUS_MINUS);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPreDecrementExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPreDecrementExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPreDecrementExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPreDecrementExpression(this, o); }
        @override
        int getRuleIndex() { return 116 ;}
    }

/**
 *<b>
*<li>Rule 118:  UnaryExpressionNotPlusMinus ::= ~ UnaryExpression
 *</b>
 */
class UnaryExpNotPlusMinus_Xor extends ASTNode implements IUnaryExpressionNotPlusMinus
    {
         late ASTNodeToken _TWIDDLE;
         late ASTNode _UnaryExpression;

         ASTNodeToken getTWIDDLE(){ return _TWIDDLE; }
         void setTWIDDLE(ASTNodeToken _TWIDDLE){ this._TWIDDLE = _TWIDDLE; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        UnaryExpNotPlusMinus_Xor(IToken leftIToken, IToken rightIToken,
                                 ASTNodeToken _TWIDDLE,
                                 ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._TWIDDLE = _TWIDDLE;
            (_TWIDDLE as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _TWIDDLE)  list.add(_TWIDDLE);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitUnaryExpNotPlusMinus_Xor(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitUnaryExpNotPlusMinus_Xor(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitUnaryExpNotPlusMinus_Xor(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitUnaryExpNotPlusMinus_Xor(this, o); }
        @override
        int getRuleIndex() { return 118 ;}
    }

/**
 *<b>
*<li>Rule 119:  UnaryExpressionNotPlusMinus ::= ! UnaryExpression
 *</b>
 */
class UnaryExpNotPlusMinus_Not extends ASTNode implements IUnaryExpressionNotPlusMinus
    {
         late ASTNodeToken _NOT;
         late ASTNode _UnaryExpression;

         ASTNodeToken getNOT(){ return _NOT; }
         void setNOT(ASTNodeToken _NOT){ this._NOT = _NOT; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        UnaryExpNotPlusMinus_Not(IToken leftIToken, IToken rightIToken,
                                 ASTNodeToken _NOT,
                                 ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._NOT = _NOT;
            (_NOT as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _NOT)  list.add(_NOT);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitUnaryExpNotPlusMinus_Not(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitUnaryExpNotPlusMinus_Not(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitUnaryExpNotPlusMinus_Not(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitUnaryExpNotPlusMinus_Not(this, o); }
        @override
        int getRuleIndex() { return 119 ;}
    }

/**
 *<b>
*<li>Rule 121:  MultiplicativeExpression ::= MultiplicativeExpression * UnaryExpression
 *</b>
 */
class MultiplicativeExp_Divide extends ASTNode implements IMultiplicativeExpression
    {
         late ASTNode _MultiplicativeExpression;
         late ASTNodeToken _MULTIPLY;
         late ASTNode _UnaryExpression;

         ASTNode getMultiplicativeExpression(){ return _MultiplicativeExpression; }
         void setMultiplicativeExpression(ASTNode _MultiplicativeExpression){ this._MultiplicativeExpression = _MultiplicativeExpression; }
         ASTNodeToken getMULTIPLY(){ return _MULTIPLY; }
         void setMULTIPLY(ASTNodeToken _MULTIPLY){ this._MULTIPLY = _MULTIPLY; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        MultiplicativeExp_Divide(IToken leftIToken, IToken rightIToken,
                                 ASTNode _MultiplicativeExpression,
                                 ASTNodeToken _MULTIPLY,
                                 ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._MultiplicativeExpression = _MultiplicativeExpression;
            (_MultiplicativeExpression as ASTNode).setParent(this);
            this._MULTIPLY = _MULTIPLY;
            (_MULTIPLY as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _MultiplicativeExpression)  list.add(_MultiplicativeExpression);
            if(null != _MULTIPLY)  list.add(_MULTIPLY);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitMultiplicativeExp_Divide(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitMultiplicativeExp_Divide(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitMultiplicativeExp_Divide(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitMultiplicativeExp_Divide(this, o); }
        @override
        int getRuleIndex() { return 121 ;}
    }

/**
 *<b>
*<li>Rule 122:  MultiplicativeExpression ::= MultiplicativeExpression / UnaryExpression
 *</b>
 */
class MultiplicativeExp_Multiply extends ASTNode implements IMultiplicativeExpression
    {
         late ASTNode _MultiplicativeExpression;
         late ASTNodeToken _DIVIDE;
         late ASTNode _UnaryExpression;

         ASTNode getMultiplicativeExpression(){ return _MultiplicativeExpression; }
         void setMultiplicativeExpression(ASTNode _MultiplicativeExpression){ this._MultiplicativeExpression = _MultiplicativeExpression; }
         ASTNodeToken getDIVIDE(){ return _DIVIDE; }
         void setDIVIDE(ASTNodeToken _DIVIDE){ this._DIVIDE = _DIVIDE; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        MultiplicativeExp_Multiply(IToken leftIToken, IToken rightIToken,
                                   ASTNode _MultiplicativeExpression,
                                   ASTNodeToken _DIVIDE,
                                   ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._MultiplicativeExpression = _MultiplicativeExpression;
            (_MultiplicativeExpression as ASTNode).setParent(this);
            this._DIVIDE = _DIVIDE;
            (_DIVIDE as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _MultiplicativeExpression)  list.add(_MultiplicativeExpression);
            if(null != _DIVIDE)  list.add(_DIVIDE);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitMultiplicativeExp_Multiply(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitMultiplicativeExp_Multiply(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitMultiplicativeExp_Multiply(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitMultiplicativeExp_Multiply(this, o); }
        @override
        int getRuleIndex() { return 122 ;}
    }

/**
 *<b>
*<li>Rule 123:  MultiplicativeExpression ::= MultiplicativeExpression % UnaryExpression
 *</b>
 */
class MultiplicativeExp_Remainder extends ASTNode implements IMultiplicativeExpression
    {
         late ASTNode _MultiplicativeExpression;
         late ASTNodeToken _REMAINDER;
         late ASTNode _UnaryExpression;

         ASTNode getMultiplicativeExpression(){ return _MultiplicativeExpression; }
         void setMultiplicativeExpression(ASTNode _MultiplicativeExpression){ this._MultiplicativeExpression = _MultiplicativeExpression; }
         ASTNodeToken getREMAINDER(){ return _REMAINDER; }
         void setREMAINDER(ASTNodeToken _REMAINDER){ this._REMAINDER = _REMAINDER; }
         ASTNode getUnaryExpression(){ return _UnaryExpression; }
         void setUnaryExpression(ASTNode _UnaryExpression){ this._UnaryExpression = _UnaryExpression; }

        MultiplicativeExp_Remainder(IToken leftIToken, IToken rightIToken,
                                    ASTNode _MultiplicativeExpression,
                                    ASTNodeToken _REMAINDER,
                                    ASTNode _UnaryExpression)
            :super(leftIToken, rightIToken)

        {
            this._MultiplicativeExpression = _MultiplicativeExpression;
            (_MultiplicativeExpression as ASTNode).setParent(this);
            this._REMAINDER = _REMAINDER;
            (_REMAINDER as ASTNode).setParent(this);
            this._UnaryExpression = _UnaryExpression;
            (_UnaryExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _MultiplicativeExpression)  list.add(_MultiplicativeExpression);
            if(null != _REMAINDER)  list.add(_REMAINDER);
            if(null != _UnaryExpression)  list.add(_UnaryExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitMultiplicativeExp_Remainder(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitMultiplicativeExp_Remainder(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitMultiplicativeExp_Remainder(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitMultiplicativeExp_Remainder(this, o); }
        @override
        int getRuleIndex() { return 123 ;}
    }

/**
 *<b>
*<li>Rule 125:  AdditiveExpression ::= AdditiveExpression + MultiplicativeExpression
 *</b>
 */
class AdditiveExp_Plus extends ASTNode implements IAdditiveExpression
    {
         late ASTNode _AdditiveExpression;
         late ASTNodeToken _PLUS;
         late ASTNode _MultiplicativeExpression;

         ASTNode getAdditiveExpression(){ return _AdditiveExpression; }
         void setAdditiveExpression(ASTNode _AdditiveExpression){ this._AdditiveExpression = _AdditiveExpression; }
         ASTNodeToken getPLUS(){ return _PLUS; }
         void setPLUS(ASTNodeToken _PLUS){ this._PLUS = _PLUS; }
         ASTNode getMultiplicativeExpression(){ return _MultiplicativeExpression; }
         void setMultiplicativeExpression(ASTNode _MultiplicativeExpression){ this._MultiplicativeExpression = _MultiplicativeExpression; }

        AdditiveExp_Plus(IToken leftIToken, IToken rightIToken,
                         ASTNode _AdditiveExpression,
                         ASTNodeToken _PLUS,
                         ASTNode _MultiplicativeExpression)
            :super(leftIToken, rightIToken)

        {
            this._AdditiveExpression = _AdditiveExpression;
            (_AdditiveExpression as ASTNode).setParent(this);
            this._PLUS = _PLUS;
            (_PLUS as ASTNode).setParent(this);
            this._MultiplicativeExpression = _MultiplicativeExpression;
            (_MultiplicativeExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _AdditiveExpression)  list.add(_AdditiveExpression);
            if(null != _PLUS)  list.add(_PLUS);
            if(null != _MultiplicativeExpression)  list.add(_MultiplicativeExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitAdditiveExp_Plus(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitAdditiveExp_Plus(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitAdditiveExp_Plus(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitAdditiveExp_Plus(this, o); }
        @override
        int getRuleIndex() { return 125 ;}
    }

/**
 *<b>
*<li>Rule 126:  AdditiveExpression ::= AdditiveExpression - MultiplicativeExpression
 *</b>
 */
class AdditiveExp_Minus extends ASTNode implements IAdditiveExpression
    {
         late ASTNode _AdditiveExpression;
         late ASTNodeToken _MINUS;
         late ASTNode _MultiplicativeExpression;

         ASTNode getAdditiveExpression(){ return _AdditiveExpression; }
         void setAdditiveExpression(ASTNode _AdditiveExpression){ this._AdditiveExpression = _AdditiveExpression; }
         ASTNodeToken getMINUS(){ return _MINUS; }
         void setMINUS(ASTNodeToken _MINUS){ this._MINUS = _MINUS; }
         ASTNode getMultiplicativeExpression(){ return _MultiplicativeExpression; }
         void setMultiplicativeExpression(ASTNode _MultiplicativeExpression){ this._MultiplicativeExpression = _MultiplicativeExpression; }

        AdditiveExp_Minus(IToken leftIToken, IToken rightIToken,
                          ASTNode _AdditiveExpression,
                          ASTNodeToken _MINUS,
                          ASTNode _MultiplicativeExpression)
            :super(leftIToken, rightIToken)

        {
            this._AdditiveExpression = _AdditiveExpression;
            (_AdditiveExpression as ASTNode).setParent(this);
            this._MINUS = _MINUS;
            (_MINUS as ASTNode).setParent(this);
            this._MultiplicativeExpression = _MultiplicativeExpression;
            (_MultiplicativeExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _AdditiveExpression)  list.add(_AdditiveExpression);
            if(null != _MINUS)  list.add(_MINUS);
            if(null != _MultiplicativeExpression)  list.add(_MultiplicativeExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitAdditiveExp_Minus(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitAdditiveExp_Minus(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitAdditiveExp_Minus(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitAdditiveExp_Minus(this, o); }
        @override
        int getRuleIndex() { return 126 ;}
    }

/**
 *<b>
*<li>Rule 128:  ShiftExpression ::= ShiftExpression << AdditiveExpression
 *</b>
 */
class ShiftExp_Left extends ASTNode implements IShiftExpression
    {
         late ASTNode _ShiftExpression;
         late ASTNodeToken _LEFT_SHIFT;
         late ASTNode _AdditiveExpression;

         ASTNode getShiftExpression(){ return _ShiftExpression; }
         void setShiftExpression(ASTNode _ShiftExpression){ this._ShiftExpression = _ShiftExpression; }
         ASTNodeToken getLEFT_SHIFT(){ return _LEFT_SHIFT; }
         void setLEFT_SHIFT(ASTNodeToken _LEFT_SHIFT){ this._LEFT_SHIFT = _LEFT_SHIFT; }
         ASTNode getAdditiveExpression(){ return _AdditiveExpression; }
         void setAdditiveExpression(ASTNode _AdditiveExpression){ this._AdditiveExpression = _AdditiveExpression; }

        ShiftExp_Left(IToken leftIToken, IToken rightIToken,
                      ASTNode _ShiftExpression,
                      ASTNodeToken _LEFT_SHIFT,
                      ASTNode _AdditiveExpression)
            :super(leftIToken, rightIToken)

        {
            this._ShiftExpression = _ShiftExpression;
            (_ShiftExpression as ASTNode).setParent(this);
            this._LEFT_SHIFT = _LEFT_SHIFT;
            (_LEFT_SHIFT as ASTNode).setParent(this);
            this._AdditiveExpression = _AdditiveExpression;
            (_AdditiveExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _ShiftExpression)  list.add(_ShiftExpression);
            if(null != _LEFT_SHIFT)  list.add(_LEFT_SHIFT);
            if(null != _AdditiveExpression)  list.add(_AdditiveExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitShiftExp_Left(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitShiftExp_Left(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitShiftExp_Left(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitShiftExp_Left(this, o); }
        @override
        int getRuleIndex() { return 128 ;}
    }

/**
 *<b>
*<li>Rule 129:  ShiftExpression ::= ShiftExpression >> AdditiveExpression
 *</b>
 */
class ShiftExp_Right extends ASTNode implements IShiftExpression
    {
         late ASTNode _ShiftExpression;
         late ASTNodeToken _RIGHT_SHIFT;
         late ASTNode _AdditiveExpression;

         ASTNode getShiftExpression(){ return _ShiftExpression; }
         void setShiftExpression(ASTNode _ShiftExpression){ this._ShiftExpression = _ShiftExpression; }
         ASTNodeToken getRIGHT_SHIFT(){ return _RIGHT_SHIFT; }
         void setRIGHT_SHIFT(ASTNodeToken _RIGHT_SHIFT){ this._RIGHT_SHIFT = _RIGHT_SHIFT; }
         ASTNode getAdditiveExpression(){ return _AdditiveExpression; }
         void setAdditiveExpression(ASTNode _AdditiveExpression){ this._AdditiveExpression = _AdditiveExpression; }

        ShiftExp_Right(IToken leftIToken, IToken rightIToken,
                       ASTNode _ShiftExpression,
                       ASTNodeToken _RIGHT_SHIFT,
                       ASTNode _AdditiveExpression)
            :super(leftIToken, rightIToken)

        {
            this._ShiftExpression = _ShiftExpression;
            (_ShiftExpression as ASTNode).setParent(this);
            this._RIGHT_SHIFT = _RIGHT_SHIFT;
            (_RIGHT_SHIFT as ASTNode).setParent(this);
            this._AdditiveExpression = _AdditiveExpression;
            (_AdditiveExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _ShiftExpression)  list.add(_ShiftExpression);
            if(null != _RIGHT_SHIFT)  list.add(_RIGHT_SHIFT);
            if(null != _AdditiveExpression)  list.add(_AdditiveExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitShiftExp_Right(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitShiftExp_Right(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitShiftExp_Right(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitShiftExp_Right(this, o); }
        @override
        int getRuleIndex() { return 129 ;}
    }

/**
 *<b>
*<li>Rule 131:  RelationalExpression ::= RelationalExpression < ShiftExpression
 *</b>
 */
class RelationalExp_Less extends ASTNode implements IRelationalExpression
    {
         late ASTNode _RelationalExpression;
         late ASTNodeToken _LESS;
         late ASTNode _ShiftExpression;

         ASTNode getRelationalExpression(){ return _RelationalExpression; }
         void setRelationalExpression(ASTNode _RelationalExpression){ this._RelationalExpression = _RelationalExpression; }
         ASTNodeToken getLESS(){ return _LESS; }
         void setLESS(ASTNodeToken _LESS){ this._LESS = _LESS; }
         ASTNode getShiftExpression(){ return _ShiftExpression; }
         void setShiftExpression(ASTNode _ShiftExpression){ this._ShiftExpression = _ShiftExpression; }

        RelationalExp_Less(IToken leftIToken, IToken rightIToken,
                           ASTNode _RelationalExpression,
                           ASTNodeToken _LESS,
                           ASTNode _ShiftExpression)
            :super(leftIToken, rightIToken)

        {
            this._RelationalExpression = _RelationalExpression;
            (_RelationalExpression as ASTNode).setParent(this);
            this._LESS = _LESS;
            (_LESS as ASTNode).setParent(this);
            this._ShiftExpression = _ShiftExpression;
            (_ShiftExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _RelationalExpression)  list.add(_RelationalExpression);
            if(null != _LESS)  list.add(_LESS);
            if(null != _ShiftExpression)  list.add(_ShiftExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitRelationalExp_Less(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitRelationalExp_Less(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitRelationalExp_Less(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitRelationalExp_Less(this, o); }
        @override
        int getRuleIndex() { return 131 ;}
    }

/**
 *<b>
*<li>Rule 132:  RelationalExpression ::= RelationalExpression > ShiftExpression
 *</b>
 */
class RelationalExp_Greater extends ASTNode implements IRelationalExpression
    {
         late ASTNode _RelationalExpression;
         late ASTNodeToken _GREATER;
         late ASTNode _ShiftExpression;

         ASTNode getRelationalExpression(){ return _RelationalExpression; }
         void setRelationalExpression(ASTNode _RelationalExpression){ this._RelationalExpression = _RelationalExpression; }
         ASTNodeToken getGREATER(){ return _GREATER; }
         void setGREATER(ASTNodeToken _GREATER){ this._GREATER = _GREATER; }
         ASTNode getShiftExpression(){ return _ShiftExpression; }
         void setShiftExpression(ASTNode _ShiftExpression){ this._ShiftExpression = _ShiftExpression; }

        RelationalExp_Greater(IToken leftIToken, IToken rightIToken,
                              ASTNode _RelationalExpression,
                              ASTNodeToken _GREATER,
                              ASTNode _ShiftExpression)
            :super(leftIToken, rightIToken)

        {
            this._RelationalExpression = _RelationalExpression;
            (_RelationalExpression as ASTNode).setParent(this);
            this._GREATER = _GREATER;
            (_GREATER as ASTNode).setParent(this);
            this._ShiftExpression = _ShiftExpression;
            (_ShiftExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _RelationalExpression)  list.add(_RelationalExpression);
            if(null != _GREATER)  list.add(_GREATER);
            if(null != _ShiftExpression)  list.add(_ShiftExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitRelationalExp_Greater(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitRelationalExp_Greater(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitRelationalExp_Greater(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitRelationalExp_Greater(this, o); }
        @override
        int getRuleIndex() { return 132 ;}
    }

/**
 *<b>
*<li>Rule 133:  RelationalExpression ::= RelationalExpression <= ShiftExpression
 *</b>
 */
class RelationalExp_LessEqual extends ASTNode implements IRelationalExpression
    {
         late ASTNode _RelationalExpression;
         late ASTNodeToken _LESS_EQUAL;
         late ASTNode _ShiftExpression;

         ASTNode getRelationalExpression(){ return _RelationalExpression; }
         void setRelationalExpression(ASTNode _RelationalExpression){ this._RelationalExpression = _RelationalExpression; }
         ASTNodeToken getLESS_EQUAL(){ return _LESS_EQUAL; }
         void setLESS_EQUAL(ASTNodeToken _LESS_EQUAL){ this._LESS_EQUAL = _LESS_EQUAL; }
         ASTNode getShiftExpression(){ return _ShiftExpression; }
         void setShiftExpression(ASTNode _ShiftExpression){ this._ShiftExpression = _ShiftExpression; }

        RelationalExp_LessEqual(IToken leftIToken, IToken rightIToken,
                                ASTNode _RelationalExpression,
                                ASTNodeToken _LESS_EQUAL,
                                ASTNode _ShiftExpression)
            :super(leftIToken, rightIToken)

        {
            this._RelationalExpression = _RelationalExpression;
            (_RelationalExpression as ASTNode).setParent(this);
            this._LESS_EQUAL = _LESS_EQUAL;
            (_LESS_EQUAL as ASTNode).setParent(this);
            this._ShiftExpression = _ShiftExpression;
            (_ShiftExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _RelationalExpression)  list.add(_RelationalExpression);
            if(null != _LESS_EQUAL)  list.add(_LESS_EQUAL);
            if(null != _ShiftExpression)  list.add(_ShiftExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitRelationalExp_LessEqual(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitRelationalExp_LessEqual(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitRelationalExp_LessEqual(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitRelationalExp_LessEqual(this, o); }
        @override
        int getRuleIndex() { return 133 ;}
    }

/**
 *<b>
*<li>Rule 134:  RelationalExpression ::= RelationalExpression >= ShiftExpression
 *</b>
 */
class RelationalExp_GreaterEqual extends ASTNode implements IRelationalExpression
    {
         late ASTNode _RelationalExpression;
         late ASTNodeToken _GREATER_EQUAL;
         late ASTNode _ShiftExpression;

         ASTNode getRelationalExpression(){ return _RelationalExpression; }
         void setRelationalExpression(ASTNode _RelationalExpression){ this._RelationalExpression = _RelationalExpression; }
         ASTNodeToken getGREATER_EQUAL(){ return _GREATER_EQUAL; }
         void setGREATER_EQUAL(ASTNodeToken _GREATER_EQUAL){ this._GREATER_EQUAL = _GREATER_EQUAL; }
         ASTNode getShiftExpression(){ return _ShiftExpression; }
         void setShiftExpression(ASTNode _ShiftExpression){ this._ShiftExpression = _ShiftExpression; }

        RelationalExp_GreaterEqual(IToken leftIToken, IToken rightIToken,
                                   ASTNode _RelationalExpression,
                                   ASTNodeToken _GREATER_EQUAL,
                                   ASTNode _ShiftExpression)
            :super(leftIToken, rightIToken)

        {
            this._RelationalExpression = _RelationalExpression;
            (_RelationalExpression as ASTNode).setParent(this);
            this._GREATER_EQUAL = _GREATER_EQUAL;
            (_GREATER_EQUAL as ASTNode).setParent(this);
            this._ShiftExpression = _ShiftExpression;
            (_ShiftExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _RelationalExpression)  list.add(_RelationalExpression);
            if(null != _GREATER_EQUAL)  list.add(_GREATER_EQUAL);
            if(null != _ShiftExpression)  list.add(_ShiftExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitRelationalExp_GreaterEqual(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitRelationalExp_GreaterEqual(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitRelationalExp_GreaterEqual(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitRelationalExp_GreaterEqual(this, o); }
        @override
        int getRuleIndex() { return 134 ;}
    }

/**
 *<b>
*<li>Rule 136:  EqualityExpression ::= EqualityExpression == RelationalExpression
 *</b>
 */
class EqualityExpr_EqualEqual extends ASTNode implements IEqualityExpression
    {
         late ASTNode _EqualityExpression;
         late ASTNodeToken _EQUAL_EQUAL;
         late ASTNode _RelationalExpression;

         ASTNode getEqualityExpression(){ return _EqualityExpression; }
         void setEqualityExpression(ASTNode _EqualityExpression){ this._EqualityExpression = _EqualityExpression; }
         ASTNodeToken getEQUAL_EQUAL(){ return _EQUAL_EQUAL; }
         void setEQUAL_EQUAL(ASTNodeToken _EQUAL_EQUAL){ this._EQUAL_EQUAL = _EQUAL_EQUAL; }
         ASTNode getRelationalExpression(){ return _RelationalExpression; }
         void setRelationalExpression(ASTNode _RelationalExpression){ this._RelationalExpression = _RelationalExpression; }

        EqualityExpr_EqualEqual(IToken leftIToken, IToken rightIToken,
                                ASTNode _EqualityExpression,
                                ASTNodeToken _EQUAL_EQUAL,
                                ASTNode _RelationalExpression)
            :super(leftIToken, rightIToken)

        {
            this._EqualityExpression = _EqualityExpression;
            (_EqualityExpression as ASTNode).setParent(this);
            this._EQUAL_EQUAL = _EQUAL_EQUAL;
            (_EQUAL_EQUAL as ASTNode).setParent(this);
            this._RelationalExpression = _RelationalExpression;
            (_RelationalExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _EqualityExpression)  list.add(_EqualityExpression);
            if(null != _EQUAL_EQUAL)  list.add(_EQUAL_EQUAL);
            if(null != _RelationalExpression)  list.add(_RelationalExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitEqualityExpr_EqualEqual(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitEqualityExpr_EqualEqual(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitEqualityExpr_EqualEqual(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitEqualityExpr_EqualEqual(this, o); }
        @override
        int getRuleIndex() { return 136 ;}
    }

/**
 *<b>
*<li>Rule 137:  EqualityExpression ::= EqualityExpression != RelationalExpression
 *</b>
 */
class EqualityExpr_NotEqual extends ASTNode implements IEqualityExpression
    {
         late ASTNode _EqualityExpression;
         late ASTNodeToken _NOT_EQUAL;
         late ASTNode _RelationalExpression;

         ASTNode getEqualityExpression(){ return _EqualityExpression; }
         void setEqualityExpression(ASTNode _EqualityExpression){ this._EqualityExpression = _EqualityExpression; }
         ASTNodeToken getNOT_EQUAL(){ return _NOT_EQUAL; }
         void setNOT_EQUAL(ASTNodeToken _NOT_EQUAL){ this._NOT_EQUAL = _NOT_EQUAL; }
         ASTNode getRelationalExpression(){ return _RelationalExpression; }
         void setRelationalExpression(ASTNode _RelationalExpression){ this._RelationalExpression = _RelationalExpression; }

        EqualityExpr_NotEqual(IToken leftIToken, IToken rightIToken,
                              ASTNode _EqualityExpression,
                              ASTNodeToken _NOT_EQUAL,
                              ASTNode _RelationalExpression)
            :super(leftIToken, rightIToken)

        {
            this._EqualityExpression = _EqualityExpression;
            (_EqualityExpression as ASTNode).setParent(this);
            this._NOT_EQUAL = _NOT_EQUAL;
            (_NOT_EQUAL as ASTNode).setParent(this);
            this._RelationalExpression = _RelationalExpression;
            (_RelationalExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _EqualityExpression)  list.add(_EqualityExpression);
            if(null != _NOT_EQUAL)  list.add(_NOT_EQUAL);
            if(null != _RelationalExpression)  list.add(_RelationalExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitEqualityExpr_NotEqual(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitEqualityExpr_NotEqual(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitEqualityExpr_NotEqual(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitEqualityExpr_NotEqual(this, o); }
        @override
        int getRuleIndex() { return 137 ;}
    }

/**
 *<em>
*<li>Rule 138:  AndExpression ::= EqualityExpression
 *</em>
 *<p>
 *<b>
*<li>Rule 139:  AndExpression ::= AndExpression & EqualityExpression
 *</b>
 */
class AndExpression extends ASTNode implements IAndExpression
    {
         late ASTNode _AndExpression;
         late ASTNodeToken _AND;
         late ASTNode _EqualityExpression;

         ASTNode getAndExpression(){ return _AndExpression; }
         void setAndExpression(ASTNode _AndExpression){ this._AndExpression = _AndExpression; }
         ASTNodeToken getAND(){ return _AND; }
         void setAND(ASTNodeToken _AND){ this._AND = _AND; }
         ASTNode getEqualityExpression(){ return _EqualityExpression; }
         void setEqualityExpression(ASTNode _EqualityExpression){ this._EqualityExpression = _EqualityExpression; }

        AndExpression(IToken leftIToken, IToken rightIToken,
                      ASTNode _AndExpression,
                      ASTNodeToken _AND,
                      ASTNode _EqualityExpression)
            :super(leftIToken, rightIToken)

        {
            this._AndExpression = _AndExpression;
            (_AndExpression as ASTNode).setParent(this);
            this._AND = _AND;
            (_AND as ASTNode).setParent(this);
            this._EqualityExpression = _EqualityExpression;
            (_EqualityExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _AndExpression)  list.add(_AndExpression);
            if(null != _AND)  list.add(_AND);
            if(null != _EqualityExpression)  list.add(_EqualityExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitAndExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitAndExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitAndExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitAndExpression(this, o); }
        @override
        int getRuleIndex() { return 139 ;}
    }

/**
 *<em>
*<li>Rule 140:  ExclusiveOrExpression ::= AndExpression
 *</em>
 *<p>
 *<b>
*<li>Rule 141:  ExclusiveOrExpression ::= ExclusiveOrExpression ^ AndExpression
 *</b>
 */
class ExclusiveOrExpression extends ASTNode implements IExclusiveOrExpression
    {
         late ASTNode _ExclusiveOrExpression;
         late ASTNodeToken _XOR;
         late ASTNode _AndExpression;

         ASTNode getExclusiveOrExpression(){ return _ExclusiveOrExpression; }
         void setExclusiveOrExpression(ASTNode _ExclusiveOrExpression){ this._ExclusiveOrExpression = _ExclusiveOrExpression; }
         ASTNodeToken getXOR(){ return _XOR; }
         void setXOR(ASTNodeToken _XOR){ this._XOR = _XOR; }
         ASTNode getAndExpression(){ return _AndExpression; }
         void setAndExpression(ASTNode _AndExpression){ this._AndExpression = _AndExpression; }

        ExclusiveOrExpression(IToken leftIToken, IToken rightIToken,
                              ASTNode _ExclusiveOrExpression,
                              ASTNodeToken _XOR,
                              ASTNode _AndExpression)
            :super(leftIToken, rightIToken)

        {
            this._ExclusiveOrExpression = _ExclusiveOrExpression;
            (_ExclusiveOrExpression as ASTNode).setParent(this);
            this._XOR = _XOR;
            (_XOR as ASTNode).setParent(this);
            this._AndExpression = _AndExpression;
            (_AndExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _ExclusiveOrExpression)  list.add(_ExclusiveOrExpression);
            if(null != _XOR)  list.add(_XOR);
            if(null != _AndExpression)  list.add(_AndExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitExclusiveOrExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitExclusiveOrExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitExclusiveOrExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitExclusiveOrExpression(this, o); }
        @override
        int getRuleIndex() { return 141 ;}
    }

/**
 *<em>
*<li>Rule 142:  InclusiveOrExpression ::= ExclusiveOrExpression
 *</em>
 *<p>
 *<b>
*<li>Rule 143:  InclusiveOrExpression ::= InclusiveOrExpression | ExclusiveOrExpression
 *</b>
 */
class InclusiveOrExpression extends ASTNode implements IInclusiveOrExpression
    {
         late ASTNode _InclusiveOrExpression;
         late ASTNodeToken _OR;
         late ASTNode _ExclusiveOrExpression;

         ASTNode getInclusiveOrExpression(){ return _InclusiveOrExpression; }
         void setInclusiveOrExpression(ASTNode _InclusiveOrExpression){ this._InclusiveOrExpression = _InclusiveOrExpression; }
         ASTNodeToken getOR(){ return _OR; }
         void setOR(ASTNodeToken _OR){ this._OR = _OR; }
         ASTNode getExclusiveOrExpression(){ return _ExclusiveOrExpression; }
         void setExclusiveOrExpression(ASTNode _ExclusiveOrExpression){ this._ExclusiveOrExpression = _ExclusiveOrExpression; }

        InclusiveOrExpression(IToken leftIToken, IToken rightIToken,
                              ASTNode _InclusiveOrExpression,
                              ASTNodeToken _OR,
                              ASTNode _ExclusiveOrExpression)
            :super(leftIToken, rightIToken)

        {
            this._InclusiveOrExpression = _InclusiveOrExpression;
            (_InclusiveOrExpression as ASTNode).setParent(this);
            this._OR = _OR;
            (_OR as ASTNode).setParent(this);
            this._ExclusiveOrExpression = _ExclusiveOrExpression;
            (_ExclusiveOrExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _InclusiveOrExpression)  list.add(_InclusiveOrExpression);
            if(null != _OR)  list.add(_OR);
            if(null != _ExclusiveOrExpression)  list.add(_ExclusiveOrExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitInclusiveOrExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitInclusiveOrExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitInclusiveOrExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitInclusiveOrExpression(this, o); }
        @override
        int getRuleIndex() { return 143 ;}
    }

/**
 *<em>
*<li>Rule 144:  ConditionalAndExpression ::= InclusiveOrExpression
 *</em>
 *<p>
 *<b>
*<li>Rule 145:  ConditionalAndExpression ::= ConditionalAndExpression && InclusiveOrExpression
 *</b>
 */
class ConditionalAndExpression extends ASTNode implements IConditionalAndExpression
    {
         late ASTNode _ConditionalAndExpression;
         late ASTNodeToken _AND_AND;
         late ASTNode _InclusiveOrExpression;

         ASTNode getConditionalAndExpression(){ return _ConditionalAndExpression; }
         void setConditionalAndExpression(ASTNode _ConditionalAndExpression){ this._ConditionalAndExpression = _ConditionalAndExpression; }
         ASTNodeToken getAND_AND(){ return _AND_AND; }
         void setAND_AND(ASTNodeToken _AND_AND){ this._AND_AND = _AND_AND; }
         ASTNode getInclusiveOrExpression(){ return _InclusiveOrExpression; }
         void setInclusiveOrExpression(ASTNode _InclusiveOrExpression){ this._InclusiveOrExpression = _InclusiveOrExpression; }

        ConditionalAndExpression(IToken leftIToken, IToken rightIToken,
                                 ASTNode _ConditionalAndExpression,
                                 ASTNodeToken _AND_AND,
                                 ASTNode _InclusiveOrExpression)
            :super(leftIToken, rightIToken)

        {
            this._ConditionalAndExpression = _ConditionalAndExpression;
            (_ConditionalAndExpression as ASTNode).setParent(this);
            this._AND_AND = _AND_AND;
            (_AND_AND as ASTNode).setParent(this);
            this._InclusiveOrExpression = _InclusiveOrExpression;
            (_InclusiveOrExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _ConditionalAndExpression)  list.add(_ConditionalAndExpression);
            if(null != _AND_AND)  list.add(_AND_AND);
            if(null != _InclusiveOrExpression)  list.add(_InclusiveOrExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitConditionalAndExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitConditionalAndExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitConditionalAndExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitConditionalAndExpression(this, o); }
        @override
        int getRuleIndex() { return 145 ;}
    }

/**
 *<em>
*<li>Rule 146:  ConditionalOrExpression ::= ConditionalAndExpression
 *</em>
 *<p>
 *<b>
*<li>Rule 147:  ConditionalOrExpression ::= ConditionalOrExpression || ConditionalAndExpression
 *</b>
 */
class ConditionalOrExpression extends ASTNode implements IConditionalOrExpression
    {
         late ASTNode _ConditionalOrExpression;
         late ASTNodeToken _OR_OR;
         late ASTNode _ConditionalAndExpression;

         ASTNode getConditionalOrExpression(){ return _ConditionalOrExpression; }
         void setConditionalOrExpression(ASTNode _ConditionalOrExpression){ this._ConditionalOrExpression = _ConditionalOrExpression; }
         ASTNodeToken getOR_OR(){ return _OR_OR; }
         void setOR_OR(ASTNodeToken _OR_OR){ this._OR_OR = _OR_OR; }
         ASTNode getConditionalAndExpression(){ return _ConditionalAndExpression; }
         void setConditionalAndExpression(ASTNode _ConditionalAndExpression){ this._ConditionalAndExpression = _ConditionalAndExpression; }

        ConditionalOrExpression(IToken leftIToken, IToken rightIToken,
                                ASTNode _ConditionalOrExpression,
                                ASTNodeToken _OR_OR,
                                ASTNode _ConditionalAndExpression)
            :super(leftIToken, rightIToken)

        {
            this._ConditionalOrExpression = _ConditionalOrExpression;
            (_ConditionalOrExpression as ASTNode).setParent(this);
            this._OR_OR = _OR_OR;
            (_OR_OR as ASTNode).setParent(this);
            this._ConditionalAndExpression = _ConditionalAndExpression;
            (_ConditionalAndExpression as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _ConditionalOrExpression)  list.add(_ConditionalOrExpression);
            if(null != _OR_OR)  list.add(_OR_OR);
            if(null != _ConditionalAndExpression)  list.add(_ConditionalAndExpression);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitConditionalOrExpression(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitConditionalOrExpression(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitConditionalOrExpression(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitConditionalOrExpression(this, o); }
        @override
        int getRuleIndex() { return 147 ;}
    }

/**
 *<b>
*<li>Rule 149:  ExpressionStmt ::= Expression CRLF
 *</b>
 */
class ExpressionStmt extends ASTNode implements IExpressionStmt
    {
         late ASTNode _Expression;
         late ASTNodeToken _CRLF;

         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ExpressionStmt(IToken leftIToken, IToken rightIToken,
                       ASTNode _Expression,
                       ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _Expression)  list.add(_Expression);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitExpressionStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitExpressionStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitExpressionStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitExpressionStmt(this, o); }
        @override
        int getRuleIndex() { return 149 ;}
    }

/**
 *<em>
*<li>Rule 153:  VariableAndSW ::= Variable
 *</em>
 *<p>
 *<b>
*<li>Rule 152:  VariableAndSW ::= sw
 *</b>
 */
class VariableAndSW extends ASTNodeToken implements IVariableAndSW
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         IToken getsw(){ return leftIToken; }

    VariableAndSW(snooperParser environment, IToken token):super(token)        {
            this.environment = environment;
            initialize();
        }

          void acceptWithVisitor(Visitor v){ v.visitVariableAndSW(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitVariableAndSW(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitVariableAndSW(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitVariableAndSW(this, o); }
        @override
        int getRuleIndex() { return 152 ;}

    //#line 349 "snooperParser.g

        VarSymbol? sym;
    }

/**
 *<b>
*<li>Rule 154:  ArgumentList ::= Expression
*<li>Rule 155:  ArgumentList ::= ArgumentList , Expression
 *</b>
 */
class ExpressionList extends AbstractASTNodeList implements IArgumentList
    {
         ASTNode getExpressionAt(int i){ return getElementAt(i) as ASTNode; }

        ExpressionList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static ExpressionList ExpressionListfromElement(ASTNode element,bool leftRecursive )
        {
            var obj = ExpressionList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _Expression)
        {
            super.addElement(_Expression);
            _Expression.setParent(this);
        }


        void acceptWithVisitor(Visitor v){ for (var i = 0; i < size(); i++) getExpressionAt(i).acceptWithVisitor(v); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) getExpressionAt(i).acceptWithArg(v, o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getExpressionAt(i).acceptWithResult(v));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getExpressionAt(i).acceptWithResultArgument(v, o));
            return result;
        }
        @override
        int getRuleIndex() { return 155 ;}
    }

/**
 *<em>
*<li>Rule 158:  CallOpt ::= %Empty
 *</em>
 *<p>
 *<b>
*<li>Rule 159:  CallOpt ::= call
 *</b>
 */
class CallOpt extends ASTNodeToken implements ICallOpt
    {
         IToken getcall(){ return leftIToken; }

    CallOpt(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitCallOpt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitCallOpt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitCallOpt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitCallOpt(this, o); }
        @override
        int getRuleIndex() { return 159 ;}
    }

/**
 *<em>
*<li>Rule 161:  FunctionCall ::= Des_3des_mac_call
*<li>Rule 162:  FunctionCall ::= Full_3des_mac_call
 *</em>
 *<p>
 *<b>
*<li>Rule 160:  FunctionCall ::= CallOpt IDENTIFIER ( ArgumentListOpt )
 *</b>
 */
class FunctionCall extends ASTNode implements IFunctionCall
    {
         late snooperParser environment;
         snooperParser getEnvironment() { return environment; }

         late CallOpt? _CallOpt;
         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _LPAREN;
         late ExpressionList? _ArgumentListOpt;
         late ASTNodeToken _RPAREN;

        /**
         * The value returned by <b>getCallOpt</b> may be <b>null</b>
         */
         CallOpt ?  getCallOpt(){ return _CallOpt; }
         void setCallOpt(CallOpt _CallOpt){ this._CallOpt = _CallOpt; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getLPAREN(){ return _LPAREN; }
         void setLPAREN(ASTNodeToken _LPAREN){ this._LPAREN = _LPAREN; }
        /**
         * The value returned by <b>getArgumentListOpt</b> may be <b>null</b>
         */
         ExpressionList ?  getArgumentListOpt(){ return _ArgumentListOpt; }
         void setArgumentListOpt(ExpressionList _ArgumentListOpt){ this._ArgumentListOpt = _ArgumentListOpt; }
         ASTNodeToken getRPAREN(){ return _RPAREN; }
         void setRPAREN(ASTNodeToken _RPAREN){ this._RPAREN = _RPAREN; }

        FunctionCall(snooperParser environment, IToken leftIToken, IToken rightIToken,
                     CallOpt? _CallOpt,
                     ASTNodeToken _IDENTIFIER,
                     ASTNodeToken _LPAREN,
                     ExpressionList? _ArgumentListOpt,
                     ASTNodeToken _RPAREN)
            :super(leftIToken, rightIToken)

        {
            this.environment = environment;
            this._CallOpt = _CallOpt;
            if (null != _CallOpt) (_CallOpt as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._LPAREN = _LPAREN;
            (_LPAREN as ASTNode).setParent(this);
            this._ArgumentListOpt = _ArgumentListOpt;
            if (null != _ArgumentListOpt) (_ArgumentListOpt as ASTNode).setParent(this);
            this._RPAREN = _RPAREN;
            (_RPAREN as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _CallOpt)  list.add(_CallOpt);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _LPAREN)  list.add(_LPAREN);
            if(null != _ArgumentListOpt)  list.add(_ArgumentListOpt);
            if(null != _RPAREN)  list.add(_RPAREN);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitFunctionCall(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitFunctionCall(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitFunctionCall(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitFunctionCall(this, o); }
        @override
        int getRuleIndex() { return 160 ;}

    //#line 361 "snooperParser.g

        FunctionSymbol? sym;
    }

/**
 *<b>
*<li>Rule 163:  ExitStatement ::= exit for CRLF
 *</b>
 */
class ExitForStatement extends ASTNode implements IExitStatement
    {
         late ASTNodeToken _exit;
         late ASTNodeToken _for;
         late ASTNodeToken _CRLF;

         ASTNodeToken getexit(){ return _exit; }
         void setexit(ASTNodeToken _exit){ this._exit = _exit; }
         ASTNodeToken getfor(){ return _for; }
         void setfor(ASTNodeToken _for){ this._for = _for; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ExitForStatement(IToken leftIToken, IToken rightIToken,
                         ASTNodeToken _exit,
                         ASTNodeToken _for,
                         ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._exit = _exit;
            (_exit as ASTNode).setParent(this);
            this._for = _for;
            (_for as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _exit)  list.add(_exit);
            if(null != _for)  list.add(_for);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitExitForStatement(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitExitForStatement(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitExitForStatement(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitExitForStatement(this, o); }
        @override
        int getRuleIndex() { return 163 ;}
    }

/**
 *<b>
*<li>Rule 164:  ExitStatement ::= exit hfor CRLF
 *</b>
 */
class ExitHforStatement extends ASTNode implements IExitStatement
    {
         late ASTNodeToken _exit;
         late ASTNodeToken _hfor;
         late ASTNodeToken _CRLF;

         ASTNodeToken getexit(){ return _exit; }
         void setexit(ASTNodeToken _exit){ this._exit = _exit; }
         ASTNodeToken gethfor(){ return _hfor; }
         void sethfor(ASTNodeToken _hfor){ this._hfor = _hfor; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ExitHforStatement(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _exit,
                          ASTNodeToken _hfor,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._exit = _exit;
            (_exit as ASTNode).setParent(this);
            this._hfor = _hfor;
            (_hfor as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _exit)  list.add(_exit);
            if(null != _hfor)  list.add(_hfor);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitExitHforStatement(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitExitHforStatement(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitExitHforStatement(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitExitHforStatement(this, o); }
        @override
        int getRuleIndex() { return 164 ;}
    }

/**
 *<b>
*<li>Rule 165:  LoadOption ::= load_script
 *</b>
 */
class LoadOption_load_script extends ASTNodeToken implements ILoadOption
    {
         IToken getload_script(){ return leftIToken; }

    LoadOption_load_script(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitLoadOption_load_script(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitLoadOption_load_script(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitLoadOption_load_script(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitLoadOption_load_script(this, o); }
        @override
        int getRuleIndex() { return 165 ;}
    }

/**
 *<b>
*<li>Rule 166:  LoadOption ::= loadprofile
 *</b>
 */
class LoadOption_loadprofile extends ASTNodeToken implements ILoadOption
    {
         IToken getloadprofile(){ return leftIToken; }

    LoadOption_loadprofile(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitLoadOption_loadprofile(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitLoadOption_loadprofile(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitLoadOption_loadprofile(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitLoadOption_loadprofile(this, o); }
        @override
        int getRuleIndex() { return 166 ;}
    }

/**
 *<b>
*<li>Rule 167:  LoadOption ::= run_script
 *</b>
 */
class LoadOption_run_script extends ASTNodeToken implements ILoadOption
    {
         IToken getrun_script(){ return leftIToken; }

    LoadOption_run_script(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitLoadOption_run_script(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitLoadOption_run_script(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitLoadOption_run_script(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitLoadOption_run_script(this, o); }
        @override
        int getRuleIndex() { return 167 ;}
    }

/**
 *<b>
*<li>Rule 168:  LoadScriptStmt ::= LoadOption STRING_LITERAL CRLF
 *</b>
 */
class LoadScriptStmt extends ASTNode implements ILoadScriptStmt
    {
         late ASTNode _LoadOption;
         late ASTNodeToken _STRING_LITERAL;
         late ASTNodeToken _CRLF;

         ASTNode getLoadOption(){ return _LoadOption; }
         void setLoadOption(ASTNode _LoadOption){ this._LoadOption = _LoadOption; }
         ASTNodeToken getSTRING_LITERAL(){ return _STRING_LITERAL; }
         void setSTRING_LITERAL(ASTNodeToken _STRING_LITERAL){ this._STRING_LITERAL = _STRING_LITERAL; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        LoadScriptStmt(IToken leftIToken, IToken rightIToken,
                       ASTNode _LoadOption,
                       ASTNodeToken _STRING_LITERAL,
                       ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._LoadOption = _LoadOption;
            (_LoadOption as ASTNode).setParent(this);
            this._STRING_LITERAL = _STRING_LITERAL;
            (_STRING_LITERAL as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _LoadOption)  list.add(_LoadOption);
            if(null != _STRING_LITERAL)  list.add(_STRING_LITERAL);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitLoadScriptStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitLoadScriptStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitLoadScriptStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitLoadScriptStmt(this, o); }
        @override
        int getRuleIndex() { return 168 ;}
    }

/**
 *<b>
*<li>Rule 169:  SimpleOption ::= timer_begin
 *</b>
 */
class SimpleOption_timer_begin extends ASTNodeToken implements ISimpleOption
    {
         IToken gettimer_begin(){ return leftIToken; }

    SimpleOption_timer_begin(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_timer_begin(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_timer_begin(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_timer_begin(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_timer_begin(this, o); }
        @override
        int getRuleIndex() { return 169 ;}
    }

/**
 *<b>
*<li>Rule 170:  SimpleOption ::= timer_end
 *</b>
 */
class SimpleOption_timer_end extends ASTNodeToken implements ISimpleOption
    {
         IToken gettimer_end(){ return leftIToken; }

    SimpleOption_timer_end(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_timer_end(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_timer_end(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_timer_end(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_timer_end(this, o); }
        @override
        int getRuleIndex() { return 170 ;}
    }

/**
 *<b>
*<li>Rule 171:  SimpleOption ::= pause
 *</b>
 */
class SimpleOption_pause extends ASTNodeToken implements ISimpleOption
    {
         IToken getpause(){ return leftIToken; }

    SimpleOption_pause(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_pause(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_pause(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_pause(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_pause(this, o); }
        @override
        int getRuleIndex() { return 171 ;}
    }

/**
 *<b>
*<li>Rule 172:  SimpleOption ::= __file__
 *</b>
 */
class SimpleOption_file extends ASTNodeToken implements ISimpleOption
    {
         IToken get__file__(){ return leftIToken; }

    SimpleOption_file(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_file(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_file(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_file(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_file(this, o); }
        @override
        int getRuleIndex() { return 172 ;}
    }

/**
 *<b>
*<li>Rule 173:  SimpleOption ::= __line__
 *</b>
 */
class SimpleOption_line extends ASTNodeToken implements ISimpleOption
    {
         IToken get__line__(){ return leftIToken; }

    SimpleOption_line(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_line(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_line(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_line(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_line(this, o); }
        @override
        int getRuleIndex() { return 173 ;}
    }

/**
 *<b>
*<li>Rule 174:  SimpleOption ::= clear_fifo
 *</b>
 */
class SimpleOption_clear_fifo extends ASTNodeToken implements ISimpleOption
    {
         IToken getclear_fifo(){ return leftIToken; }

    SimpleOption_clear_fifo(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_clear_fifo(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_clear_fifo(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_clear_fifo(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_clear_fifo(this, o); }
        @override
        int getRuleIndex() { return 174 ;}
    }

/**
 *<b>
*<li>Rule 175:  SimpleOption ::= beep
 *</b>
 */
class SimpleOption_beep extends ASTNodeToken implements ISimpleOption
    {
         IToken getbeep(){ return leftIToken; }

    SimpleOption_beep(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_beep(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_beep(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_beep(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_beep(this, o); }
        @override
        int getRuleIndex() { return 175 ;}
    }

/**
 *<b>
*<li>Rule 176:  SimpleOption ::= eject
 *</b>
 */
class SimpleOption_eject extends ASTNodeToken implements ISimpleOption
    {
         IToken geteject(){ return leftIToken; }

    SimpleOption_eject(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_eject(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_eject(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_eject(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_eject(this, o); }
        @override
        int getRuleIndex() { return 176 ;}
    }

/**
 *<b>
*<li>Rule 177:  SimpleOption ::= insert
 *</b>
 */
class SimpleOption_insert extends ASTNodeToken implements ISimpleOption
    {
         IToken getinsert(){ return leftIToken; }

    SimpleOption_insert(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_insert(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_insert(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_insert(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_insert(this, o); }
        @override
        int getRuleIndex() { return 177 ;}
    }

/**
 *<b>
*<li>Rule 178:  SimpleOption ::= split
 *</b>
 */
class SimpleOption_split extends ASTNodeToken implements ISimpleOption
    {
         IToken getsplit(){ return leftIToken; }

    SimpleOption_split(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_split(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_split(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_split(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_split(this, o); }
        @override
        int getRuleIndex() { return 178 ;}
    }

/**
 *<b>
*<li>Rule 179:  SimpleOption ::= end
 *</b>
 */
class SimpleOption_end extends ASTNodeToken implements ISimpleOption
    {
         IToken getend(){ return leftIToken; }

    SimpleOption_end(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_end(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_end(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_end(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_end(this, o); }
        @override
        int getRuleIndex() { return 179 ;}
    }

/**
 *<b>
*<li>Rule 180:  SimpleOption ::= clear
 *</b>
 */
class SimpleOption_clear extends ASTNodeToken implements ISimpleOption
    {
         IToken getclear(){ return leftIToken; }

    SimpleOption_clear(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitSimpleOption_clear(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSimpleOption_clear(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSimpleOption_clear(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSimpleOption_clear(this, o); }
        @override
        int getRuleIndex() { return 180 ;}
    }

/**
 *<b>
*<li>Rule 181:  KeyWordWithoutParameterStmt ::= SimpleOption CRLF
 *</b>
 */
class KeyWordWithoutParameterStmt extends ASTNode implements IKeyWordWithoutParameterStmt
    {
         late ASTNode _SimpleOption;
         late ASTNodeToken _CRLF;

         ASTNode getSimpleOption(){ return _SimpleOption; }
         void setSimpleOption(ASTNode _SimpleOption){ this._SimpleOption = _SimpleOption; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        KeyWordWithoutParameterStmt(IToken leftIToken, IToken rightIToken,
                                    ASTNode _SimpleOption,
                                    ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._SimpleOption = _SimpleOption;
            (_SimpleOption as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _SimpleOption)  list.add(_SimpleOption);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitKeyWordWithoutParameterStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitKeyWordWithoutParameterStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitKeyWordWithoutParameterStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitKeyWordWithoutParameterStmt(this, o); }
        @override
        int getRuleIndex() { return 181 ;}
    }

/**
 *<b>
*<li>Rule 182:  SleepStmt ::= sleep Expression CRLF
 *</b>
 */
class SleepStmt extends ASTNode implements ISleepStmt
    {
         late ASTNodeToken _sleep;
         late ASTNode _Expression;
         late ASTNodeToken _CRLF;

         ASTNodeToken getsleep(){ return _sleep; }
         void setsleep(ASTNodeToken _sleep){ this._sleep = _sleep; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SleepStmt(IToken leftIToken, IToken rightIToken,
                  ASTNodeToken _sleep,
                  ASTNode _Expression,
                  ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._sleep = _sleep;
            (_sleep as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _sleep)  list.add(_sleep);
            if(null != _Expression)  list.add(_Expression);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSleepStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSleepStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSleepStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSleepStmt(this, o); }
        @override
        int getRuleIndex() { return 182 ;}
    }

/**
 *<b>
*<li>Rule 183:  SetStmt ::= set IDENTIFIER CRLF
 *</b>
 */
class SetStmt_Identifier extends ASTNode implements ISetStmt
    {
         late ASTNodeToken _set;
         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _CRLF;

         ASTNodeToken getset(){ return _set; }
         void setset(ASTNodeToken _set){ this._set = _set; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SetStmt_Identifier(IToken leftIToken, IToken rightIToken,
                           ASTNodeToken _set,
                           ASTNodeToken _IDENTIFIER,
                           ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._set = _set;
            (_set as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _set)  list.add(_set);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSetStmt_Identifier(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSetStmt_Identifier(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSetStmt_Identifier(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSetStmt_Identifier(this, o); }
        @override
        int getRuleIndex() { return 183 ;}
    }

/**
 *<b>
*<li>Rule 184:  SetStmt ::= set Variable CRLF
 *</b>
 */
class SetStmt_MacroName extends ASTNode implements ISetStmt
    {
         late ASTNodeToken _set;
         late ASTNode _Variable;
         late ASTNodeToken _CRLF;

         ASTNodeToken getset(){ return _set; }
         void setset(ASTNodeToken _set){ this._set = _set; }
         ASTNode getVariable(){ return _Variable; }
         void setVariable(ASTNode _Variable){ this._Variable = _Variable; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SetStmt_MacroName(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _set,
                          ASTNode _Variable,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._set = _set;
            (_set as ASTNode).setParent(this);
            this._Variable = _Variable;
            (_Variable as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _set)  list.add(_set);
            if(null != _Variable)  list.add(_Variable);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSetStmt_MacroName(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSetStmt_MacroName(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSetStmt_MacroName(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSetStmt_MacroName(this, o); }
        @override
        int getRuleIndex() { return 184 ;}
    }

/**
 *<b>
*<li>Rule 185:  PrintStmt ::= message ExpressionOpt CRLF
 *</b>
 */
class PrintStmt_Message extends ASTNode implements IPrintStmt
    {
         late ASTNodeToken _message;
         late ASTNode? _ExpressionOpt;
         late ASTNodeToken _CRLF;

         ASTNodeToken getmessage(){ return _message; }
         void setmessage(ASTNodeToken _message){ this._message = _message; }
        /**
         * The value returned by <b>getExpressionOpt</b> may be <b>null</b>
         */
         ASTNode ?  getExpressionOpt(){ return _ExpressionOpt; }
         void setExpressionOpt(ASTNode _ExpressionOpt){ this._ExpressionOpt = _ExpressionOpt; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        PrintStmt_Message(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _message,
                          ASTNode? _ExpressionOpt,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._message = _message;
            (_message as ASTNode).setParent(this);
            this._ExpressionOpt = _ExpressionOpt;
            if (null != _ExpressionOpt) (_ExpressionOpt as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _message)  list.add(_message);
            if(null != _ExpressionOpt)  list.add(_ExpressionOpt);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPrintStmt_Message(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPrintStmt_Message(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPrintStmt_Message(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPrintStmt_Message(this, o); }
        @override
        int getRuleIndex() { return 185 ;}
    }

/**
 *<b>
*<li>Rule 186:  PrintStmt ::= ? ExpressionOpt CRLF
 *</b>
 */
class PrintStmt_Quqstion extends ASTNode implements IPrintStmt
    {
         late ASTNodeToken _QUESTION;
         late ASTNode? _ExpressionOpt;
         late ASTNodeToken _CRLF;

         ASTNodeToken getQUESTION(){ return _QUESTION; }
         void setQUESTION(ASTNodeToken _QUESTION){ this._QUESTION = _QUESTION; }
        /**
         * The value returned by <b>getExpressionOpt</b> may be <b>null</b>
         */
         ASTNode ?  getExpressionOpt(){ return _ExpressionOpt; }
         void setExpressionOpt(ASTNode _ExpressionOpt){ this._ExpressionOpt = _ExpressionOpt; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        PrintStmt_Quqstion(IToken leftIToken, IToken rightIToken,
                           ASTNodeToken _QUESTION,
                           ASTNode? _ExpressionOpt,
                           ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._QUESTION = _QUESTION;
            (_QUESTION as ASTNode).setParent(this);
            this._ExpressionOpt = _ExpressionOpt;
            if (null != _ExpressionOpt) (_ExpressionOpt as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _QUESTION)  list.add(_QUESTION);
            if(null != _ExpressionOpt)  list.add(_ExpressionOpt);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPrintStmt_Quqstion(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPrintStmt_Quqstion(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPrintStmt_Quqstion(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPrintStmt_Quqstion(this, o); }
        @override
        int getRuleIndex() { return 186 ;}
    }

/**
 *<b>
*<li>Rule 187:  OnOffOption ::= on
 *</b>
 */
class OnOffOption_on extends ASTNodeToken implements IOnOffOption
    {
         IToken geton(){ return leftIToken; }

    OnOffOption_on(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitOnOffOption_on(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitOnOffOption_on(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitOnOffOption_on(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitOnOffOption_on(this, o); }
        @override
        int getRuleIndex() { return 187 ;}
    }

/**
 *<b>
*<li>Rule 188:  OnOffOption ::= off
 *</b>
 */
class OnOffOption_off extends ASTNodeToken implements IOnOffOption
    {
         IToken getoff(){ return leftIToken; }

    OnOffOption_off(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitOnOffOption_off(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitOnOffOption_off(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitOnOffOption_off(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitOnOffOption_off(this, o); }
        @override
        int getRuleIndex() { return 188 ;}
    }

/**
 *<b>
*<li>Rule 189:  AutoResponseStmt ::= auto_response OnOffOption CRLF
 *</b>
 */
class AutoResponseStmt extends ASTNode implements IAutoResponseStmt
    {
         late ASTNodeToken _auto_response;
         late ASTNode _OnOffOption;
         late ASTNodeToken _CRLF;

         ASTNodeToken getauto_response(){ return _auto_response; }
         void setauto_response(ASTNodeToken _auto_response){ this._auto_response = _auto_response; }
         ASTNode getOnOffOption(){ return _OnOffOption; }
         void setOnOffOption(ASTNode _OnOffOption){ this._OnOffOption = _OnOffOption; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        AutoResponseStmt(IToken leftIToken, IToken rightIToken,
                         ASTNodeToken _auto_response,
                         ASTNode _OnOffOption,
                         ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._auto_response = _auto_response;
            (_auto_response as ASTNode).setParent(this);
            this._OnOffOption = _OnOffOption;
            (_OnOffOption as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _auto_response)  list.add(_auto_response);
            if(null != _OnOffOption)  list.add(_OnOffOption);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitAutoResponseStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitAutoResponseStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitAutoResponseStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitAutoResponseStmt(this, o); }
        @override
        int getRuleIndex() { return 189 ;}
    }

/**
 *<b>
*<li>Rule 190:  WriteFifoStmt ::= write_fifo IDENTIFIER CRLF
 *</b>
 */
class WriteFifoStmt_Identifier extends ASTNode implements IWriteFifoStmt
    {
         late ASTNodeToken _write_fifo;
         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _CRLF;

         ASTNodeToken getwrite_fifo(){ return _write_fifo; }
         void setwrite_fifo(ASTNodeToken _write_fifo){ this._write_fifo = _write_fifo; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        WriteFifoStmt_Identifier(IToken leftIToken, IToken rightIToken,
                                 ASTNodeToken _write_fifo,
                                 ASTNodeToken _IDENTIFIER,
                                 ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._write_fifo = _write_fifo;
            (_write_fifo as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _write_fifo)  list.add(_write_fifo);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitWriteFifoStmt_Identifier(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitWriteFifoStmt_Identifier(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitWriteFifoStmt_Identifier(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitWriteFifoStmt_Identifier(this, o); }
        @override
        int getRuleIndex() { return 190 ;}
    }

/**
 *<b>
*<li>Rule 191:  WriteFifoStmt ::= write_fifo Variable CRLF
 *</b>
 */
class WriteFifoStmt_MacroName extends ASTNode implements IWriteFifoStmt
    {
         late ASTNodeToken _write_fifo;
         late ASTNode _Variable;
         late ASTNodeToken _CRLF;

         ASTNodeToken getwrite_fifo(){ return _write_fifo; }
         void setwrite_fifo(ASTNodeToken _write_fifo){ this._write_fifo = _write_fifo; }
         ASTNode getVariable(){ return _Variable; }
         void setVariable(ASTNode _Variable){ this._Variable = _Variable; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        WriteFifoStmt_MacroName(IToken leftIToken, IToken rightIToken,
                                ASTNodeToken _write_fifo,
                                ASTNode _Variable,
                                ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._write_fifo = _write_fifo;
            (_write_fifo as ASTNode).setParent(this);
            this._Variable = _Variable;
            (_Variable as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _write_fifo)  list.add(_write_fifo);
            if(null != _Variable)  list.add(_Variable);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitWriteFifoStmt_MacroName(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitWriteFifoStmt_MacroName(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitWriteFifoStmt_MacroName(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitWriteFifoStmt_MacroName(this, o); }
        @override
        int getRuleIndex() { return 191 ;}
    }

/**
 *<b>
*<li>Rule 192:  UploadStmt ::= upload STRING_LITERAL CRLF
 *</b>
 */
class UploadStmt_upload extends ASTNode implements IUploadStmt
    {
         late ASTNodeToken _upload;
         late ASTNodeToken _STRING_LITERAL;
         late ASTNodeToken _CRLF;

         ASTNodeToken getupload(){ return _upload; }
         void setupload(ASTNodeToken _upload){ this._upload = _upload; }
         ASTNodeToken getSTRING_LITERAL(){ return _STRING_LITERAL; }
         void setSTRING_LITERAL(ASTNodeToken _STRING_LITERAL){ this._STRING_LITERAL = _STRING_LITERAL; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        UploadStmt_upload(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _upload,
                          ASTNodeToken _STRING_LITERAL,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._upload = _upload;
            (_upload as ASTNode).setParent(this);
            this._STRING_LITERAL = _STRING_LITERAL;
            (_STRING_LITERAL as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _upload)  list.add(_upload);
            if(null != _STRING_LITERAL)  list.add(_STRING_LITERAL);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitUploadStmt_upload(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitUploadStmt_upload(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitUploadStmt_upload(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitUploadStmt_upload(this, o); }
        @override
        int getRuleIndex() { return 192 ;}
    }

/**
 *<b>
*<li>Rule 193:  UploadStmt ::= upload2 STRING_LITERAL CRLF
 *</b>
 */
class UploadStmt_upload2 extends ASTNode implements IUploadStmt
    {
         late ASTNodeToken _upload2;
         late ASTNodeToken _STRING_LITERAL;
         late ASTNodeToken _CRLF;

         ASTNodeToken getupload2(){ return _upload2; }
         void setupload2(ASTNodeToken _upload2){ this._upload2 = _upload2; }
         ASTNodeToken getSTRING_LITERAL(){ return _STRING_LITERAL; }
         void setSTRING_LITERAL(ASTNodeToken _STRING_LITERAL){ this._STRING_LITERAL = _STRING_LITERAL; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        UploadStmt_upload2(IToken leftIToken, IToken rightIToken,
                           ASTNodeToken _upload2,
                           ASTNodeToken _STRING_LITERAL,
                           ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._upload2 = _upload2;
            (_upload2 as ASTNode).setParent(this);
            this._STRING_LITERAL = _STRING_LITERAL;
            (_STRING_LITERAL as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _upload2)  list.add(_upload2);
            if(null != _STRING_LITERAL)  list.add(_STRING_LITERAL);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitUploadStmt_upload2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitUploadStmt_upload2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitUploadStmt_upload2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitUploadStmt_upload2(this, o); }
        @override
        int getRuleIndex() { return 193 ;}
    }

/**
 *<b>
*<li>Rule 194:  ResetStmt ::= reset CRLF
 *</b>
 */
class ResetStmt_reset extends ASTNode implements IResetStmt
    {
         late ASTNodeToken _reset;
         late ASTNodeToken _CRLF;

         ASTNodeToken getreset(){ return _reset; }
         void setreset(ASTNodeToken _reset){ this._reset = _reset; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ResetStmt_reset(IToken leftIToken, IToken rightIToken,
                        ASTNodeToken _reset,
                        ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._reset = _reset;
            (_reset as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _reset)  list.add(_reset);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitResetStmt_reset(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitResetStmt_reset(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitResetStmt_reset(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitResetStmt_reset(this, o); }
        @override
        int getRuleIndex() { return 194 ;}
    }

/**
 *<b>
*<li>Rule 195:  ResetStmt ::= reset2 CRLF
 *</b>
 */
class ResetStmt_reset2 extends ASTNode implements IResetStmt
    {
         late ASTNodeToken _reset2;
         late ASTNodeToken _CRLF;

         ASTNodeToken getreset2(){ return _reset2; }
         void setreset2(ASTNodeToken _reset2){ this._reset2 = _reset2; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ResetStmt_reset2(IToken leftIToken, IToken rightIToken,
                         ASTNodeToken _reset2,
                         ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._reset2 = _reset2;
            (_reset2 as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _reset2)  list.add(_reset2);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitResetStmt_reset2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitResetStmt_reset2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitResetStmt_reset2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitResetStmt_reset2(this, o); }
        @override
        int getRuleIndex() { return 195 ;}
    }

/**
 *<b>
*<li>Rule 196:  ResetStmt ::= reset cold CRLF
 *</b>
 */
class ResetStmt_reset_cold extends ASTNode implements IResetStmt
    {
         late ASTNodeToken _reset;
         late ASTNodeToken _cold;
         late ASTNodeToken _CRLF;

         ASTNodeToken getreset(){ return _reset; }
         void setreset(ASTNodeToken _reset){ this._reset = _reset; }
         ASTNodeToken getcold(){ return _cold; }
         void setcold(ASTNodeToken _cold){ this._cold = _cold; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ResetStmt_reset_cold(IToken leftIToken, IToken rightIToken,
                             ASTNodeToken _reset,
                             ASTNodeToken _cold,
                             ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._reset = _reset;
            (_reset as ASTNode).setParent(this);
            this._cold = _cold;
            (_cold as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _reset)  list.add(_reset);
            if(null != _cold)  list.add(_cold);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitResetStmt_reset_cold(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitResetStmt_reset_cold(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitResetStmt_reset_cold(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitResetStmt_reset_cold(this, o); }
        @override
        int getRuleIndex() { return 196 ;}
    }

/**
 *<b>
*<li>Rule 197:  ResetStmt ::= reset2 cold CRLF
 *</b>
 */
class ResetStmt_reset2_cold extends ASTNode implements IResetStmt
    {
         late ASTNodeToken _reset2;
         late ASTNodeToken _cold;
         late ASTNodeToken _CRLF;

         ASTNodeToken getreset2(){ return _reset2; }
         void setreset2(ASTNodeToken _reset2){ this._reset2 = _reset2; }
         ASTNodeToken getcold(){ return _cold; }
         void setcold(ASTNodeToken _cold){ this._cold = _cold; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ResetStmt_reset2_cold(IToken leftIToken, IToken rightIToken,
                              ASTNodeToken _reset2,
                              ASTNodeToken _cold,
                              ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._reset2 = _reset2;
            (_reset2 as ASTNode).setParent(this);
            this._cold = _cold;
            (_cold as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _reset2)  list.add(_reset2);
            if(null != _cold)  list.add(_cold);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitResetStmt_reset2_cold(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitResetStmt_reset2_cold(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitResetStmt_reset2_cold(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitResetStmt_reset2_cold(this, o); }
        @override
        int getRuleIndex() { return 197 ;}
    }

/**
 *<b>
*<li>Rule 200:  InstallParameterList ::= InstallParameter
*<li>Rule 201:  InstallParameterList ::= InstallParameterList , InstallParameter
 *</b>
 */
class InstallParameterList extends AbstractASTNodeList implements IInstallParameterList
    {
         ASTNode getInstallParameterAt(int i){ return getElementAt(i) as ASTNode; }

        InstallParameterList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static InstallParameterList InstallParameterListfromElement(ASTNode element,bool leftRecursive )
        {
            var obj = InstallParameterList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _InstallParameter)
        {
            super.addElement(_InstallParameter);
            _InstallParameter.setParent(this);
        }


        void acceptWithVisitor(Visitor v){ for (var i = 0; i < size(); i++) getInstallParameterAt(i).acceptWithVisitor(v); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) getInstallParameterAt(i).acceptWithArg(v, o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getInstallParameterAt(i).acceptWithResult(v));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getInstallParameterAt(i).acceptWithResultArgument(v, o));
            return result;
        }
        @override
        int getRuleIndex() { return 201 ;}
    }

/**
 *<b>
*<li>Rule 202:  InstallStmt ::= install InstallParameterList CRLF
 *</b>
 */
class InstallStmt_install extends ASTNode implements IInstallStmt
    {
         late ASTNodeToken _install;
         late InstallParameterList _InstallParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getinstall(){ return _install; }
         void setinstall(ASTNodeToken _install){ this._install = _install; }
         InstallParameterList getInstallParameterList(){ return _InstallParameterList; }
         void setInstallParameterList(InstallParameterList _InstallParameterList){ this._InstallParameterList = _InstallParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        InstallStmt_install(IToken leftIToken, IToken rightIToken,
                            ASTNodeToken _install,
                            InstallParameterList _InstallParameterList,
                            ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._install = _install;
            (_install as ASTNode).setParent(this);
            this._InstallParameterList = _InstallParameterList;
            (_InstallParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _install)  list.add(_install);
            if(null != _InstallParameterList)  list.add(_InstallParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitInstallStmt_install(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitInstallStmt_install(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitInstallStmt_install(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitInstallStmt_install(this, o); }
        @override
        int getRuleIndex() { return 202 ;}
    }

/**
 *<b>
*<li>Rule 203:  InstallStmt ::= install_2 InstallParameterList CRLF
 *</b>
 */
class InstallStmt_install_2 extends ASTNode implements IInstallStmt
    {
         late ASTNodeToken _install_2;
         late InstallParameterList _InstallParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getinstall_2(){ return _install_2; }
         void setinstall_2(ASTNodeToken _install_2){ this._install_2 = _install_2; }
         InstallParameterList getInstallParameterList(){ return _InstallParameterList; }
         void setInstallParameterList(InstallParameterList _InstallParameterList){ this._InstallParameterList = _InstallParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        InstallStmt_install_2(IToken leftIToken, IToken rightIToken,
                              ASTNodeToken _install_2,
                              InstallParameterList _InstallParameterList,
                              ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._install_2 = _install_2;
            (_install_2 as ASTNode).setParent(this);
            this._InstallParameterList = _InstallParameterList;
            (_InstallParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _install_2)  list.add(_install_2);
            if(null != _InstallParameterList)  list.add(_InstallParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitInstallStmt_install_2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitInstallStmt_install_2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitInstallStmt_install_2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitInstallStmt_install_2(this, o); }
        @override
        int getRuleIndex() { return 203 ;}
    }

/**
 *<em>
*<li>Rule 205:  ParameterItem ::= VariableAndSW
*<li>Rule 206:  ParameterItem ::= NumberLiteral
*<li>Rule 207:  ParameterItem ::= StringLiteral
 *</em>
 *<p>
 *<b>
*<li>Rule 204:  ParameterItem ::= IDENTIFIER
 *</b>
 */
class ParameterItem extends ASTNodeToken implements IParameterItem
    {
         IToken getIDENTIFIER(){ return leftIToken; }

    ParameterItem(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitParameterItem(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitParameterItem(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitParameterItem(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitParameterItem(this, o); }
        @override
        int getRuleIndex() { return 204 ;}
    }

/**
 *<b>
*<li>Rule 208:  UtilFunctionParameterList ::= ParameterItem
*<li>Rule 209:  UtilFunctionParameterList ::= UtilFunctionParameterList , ParameterItem
 *</b>
 */
class ParameterItemList extends AbstractASTNodeList implements IUtilFunctionParameterList
    {
         ASTNode getParameterItemAt(int i){ return getElementAt(i) as ASTNode; }

        ParameterItemList(IToken leftToken, IToken rightToken , bool leftRecursive  ):super(leftToken, rightToken, leftRecursive)
        {}

        static ParameterItemList ParameterItemListfromElement(ASTNode element,bool leftRecursive )
        {
            var obj = ParameterItemList(element.getLeftIToken(),element.getRightIToken(), leftRecursive);
            obj.list.add(element);
            (element as ASTNode).setParent(obj);
            return obj;
        }

          void addElement(ASTNode _ParameterItem)
        {
            super.addElement(_ParameterItem);
            _ParameterItem.setParent(this);
        }


        void acceptWithVisitor(Visitor v){ for (var i = 0; i < size(); i++) getParameterItemAt(i).acceptWithVisitor(v); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ for (var i = 0; i < size(); i++) getParameterItemAt(i).acceptWithArg(v, o); }
         Object? acceptWithResult(ResultVisitor v)
        {
            var result = ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getParameterItemAt(i).acceptWithResult(v));
            return result;
        }
         Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)
        {
            var result = new ArrayList();
            for (var i = 0; i < size(); i++)
                result.add(getParameterItemAt(i).acceptWithResultArgument(v, o));
            return result;
        }
        @override
        int getRuleIndex() { return 209 ;}
    }

/**
 *<b>
*<li>Rule 210:  JcopAuthStmt ::= jcop22_ext_auth UtilFunctionParameterList CRLF
 *</b>
 */
class JcopAuthStmt_jcop22_ext_auth extends ASTNode implements IJcopAuthStmt
    {
         late ASTNodeToken _jcop22_ext_auth;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getjcop22_ext_auth(){ return _jcop22_ext_auth; }
         void setjcop22_ext_auth(ASTNodeToken _jcop22_ext_auth){ this._jcop22_ext_auth = _jcop22_ext_auth; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        JcopAuthStmt_jcop22_ext_auth(IToken leftIToken, IToken rightIToken,
                                     ASTNodeToken _jcop22_ext_auth,
                                     ParameterItemList _UtilFunctionParameterList,
                                     ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._jcop22_ext_auth = _jcop22_ext_auth;
            (_jcop22_ext_auth as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _jcop22_ext_auth)  list.add(_jcop22_ext_auth);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitJcopAuthStmt_jcop22_ext_auth(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitJcopAuthStmt_jcop22_ext_auth(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitJcopAuthStmt_jcop22_ext_auth(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitJcopAuthStmt_jcop22_ext_auth(this, o); }
        @override
        int getRuleIndex() { return 210 ;}
    }

/**
 *<b>
*<li>Rule 211:  JcopAuthStmt ::= jcop22_ext_auth_kmc UtilFunctionParameterList CRLF
 *</b>
 */
class JcopAuthStmt_jcop22_ext_auth_kmc extends ASTNode implements IJcopAuthStmt
    {
         late ASTNodeToken _jcop22_ext_auth_kmc;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getjcop22_ext_auth_kmc(){ return _jcop22_ext_auth_kmc; }
         void setjcop22_ext_auth_kmc(ASTNodeToken _jcop22_ext_auth_kmc){ this._jcop22_ext_auth_kmc = _jcop22_ext_auth_kmc; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        JcopAuthStmt_jcop22_ext_auth_kmc(IToken leftIToken, IToken rightIToken,
                                         ASTNodeToken _jcop22_ext_auth_kmc,
                                         ParameterItemList _UtilFunctionParameterList,
                                         ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._jcop22_ext_auth_kmc = _jcop22_ext_auth_kmc;
            (_jcop22_ext_auth_kmc as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _jcop22_ext_auth_kmc)  list.add(_jcop22_ext_auth_kmc);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitJcopAuthStmt_jcop22_ext_auth_kmc(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitJcopAuthStmt_jcop22_ext_auth_kmc(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitJcopAuthStmt_jcop22_ext_auth_kmc(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitJcopAuthStmt_jcop22_ext_auth_kmc(this, o); }
        @override
        int getRuleIndex() { return 211 ;}
    }

/**
 *<b>
*<li>Rule 212:  JcopAuthStmt ::= jcop22_ext_auth_2 UtilFunctionParameterList CRLF
 *</b>
 */
class JcopAuthStmt_jcop22_ext_auth_2 extends ASTNode implements IJcopAuthStmt
    {
         late ASTNodeToken _jcop22_ext_auth_2;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getjcop22_ext_auth_2(){ return _jcop22_ext_auth_2; }
         void setjcop22_ext_auth_2(ASTNodeToken _jcop22_ext_auth_2){ this._jcop22_ext_auth_2 = _jcop22_ext_auth_2; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        JcopAuthStmt_jcop22_ext_auth_2(IToken leftIToken, IToken rightIToken,
                                       ASTNodeToken _jcop22_ext_auth_2,
                                       ParameterItemList _UtilFunctionParameterList,
                                       ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._jcop22_ext_auth_2 = _jcop22_ext_auth_2;
            (_jcop22_ext_auth_2 as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _jcop22_ext_auth_2)  list.add(_jcop22_ext_auth_2);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitJcopAuthStmt_jcop22_ext_auth_2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitJcopAuthStmt_jcop22_ext_auth_2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitJcopAuthStmt_jcop22_ext_auth_2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitJcopAuthStmt_jcop22_ext_auth_2(this, o); }
        @override
        int getRuleIndex() { return 212 ;}
    }

/**
 *<b>
*<li>Rule 213:  JcopAuthStmt ::= jcop22_ext_auth_kmc_2 UtilFunctionParameterList CRLF
 *</b>
 */
class JcopAuthStmt_jcop22_ext_auth_kmc_2 extends ASTNode implements IJcopAuthStmt
    {
         late ASTNodeToken _jcop22_ext_auth_kmc_2;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getjcop22_ext_auth_kmc_2(){ return _jcop22_ext_auth_kmc_2; }
         void setjcop22_ext_auth_kmc_2(ASTNodeToken _jcop22_ext_auth_kmc_2){ this._jcop22_ext_auth_kmc_2 = _jcop22_ext_auth_kmc_2; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        JcopAuthStmt_jcop22_ext_auth_kmc_2(IToken leftIToken, IToken rightIToken,
                                           ASTNodeToken _jcop22_ext_auth_kmc_2,
                                           ParameterItemList _UtilFunctionParameterList,
                                           ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._jcop22_ext_auth_kmc_2 = _jcop22_ext_auth_kmc_2;
            (_jcop22_ext_auth_kmc_2 as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _jcop22_ext_auth_kmc_2)  list.add(_jcop22_ext_auth_kmc_2);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitJcopAuthStmt_jcop22_ext_auth_kmc_2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitJcopAuthStmt_jcop22_ext_auth_kmc_2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitJcopAuthStmt_jcop22_ext_auth_kmc_2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitJcopAuthStmt_jcop22_ext_auth_kmc_2(this, o); }
        @override
        int getRuleIndex() { return 213 ;}
    }

/**
 *<b>
*<li>Rule 214:  JcopAuthStmt ::= jcop22_ext_auth_nonblock UtilFunctionParameterList CRLF
 *</b>
 */
class JcopAuthStmt_jcop22_ext_auth_nonblock extends ASTNode implements IJcopAuthStmt
    {
         late ASTNodeToken _jcop22_ext_auth_nonblock;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getjcop22_ext_auth_nonblock(){ return _jcop22_ext_auth_nonblock; }
         void setjcop22_ext_auth_nonblock(ASTNodeToken _jcop22_ext_auth_nonblock){ this._jcop22_ext_auth_nonblock = _jcop22_ext_auth_nonblock; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        JcopAuthStmt_jcop22_ext_auth_nonblock(IToken leftIToken, IToken rightIToken,
                                              ASTNodeToken _jcop22_ext_auth_nonblock,
                                              ParameterItemList _UtilFunctionParameterList,
                                              ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._jcop22_ext_auth_nonblock = _jcop22_ext_auth_nonblock;
            (_jcop22_ext_auth_nonblock as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _jcop22_ext_auth_nonblock)  list.add(_jcop22_ext_auth_nonblock);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitJcopAuthStmt_jcop22_ext_auth_nonblock(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitJcopAuthStmt_jcop22_ext_auth_nonblock(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitJcopAuthStmt_jcop22_ext_auth_nonblock(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitJcopAuthStmt_jcop22_ext_auth_nonblock(this, o); }
        @override
        int getRuleIndex() { return 214 ;}
    }

/**
 *<b>
*<li>Rule 215:  SelectStmt ::= select IDENTIFIER UtilFunctionParameterList CRLF
 *</b>
 */
class SelectStmt_select extends ASTNode implements ISelectStmt
    {
         late ASTNodeToken _select;
         late ASTNodeToken _IDENTIFIER;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getselect(){ return _select; }
         void setselect(ASTNodeToken _select){ this._select = _select; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SelectStmt_select(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _select,
                          ASTNodeToken _IDENTIFIER,
                          ParameterItemList _UtilFunctionParameterList,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._select = _select;
            (_select as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _select)  list.add(_select);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSelectStmt_select(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSelectStmt_select(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSelectStmt_select(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSelectStmt_select(this, o); }
        @override
        int getRuleIndex() { return 215 ;}
    }

/**
 *<b>
*<li>Rule 216:  SelectStmt ::= select_2 IDENTIFIER UtilFunctionParameterList CRLF
 *</b>
 */
class SelectStmt_select_2 extends ASTNode implements ISelectStmt
    {
         late ASTNodeToken _select_2;
         late ASTNodeToken _IDENTIFIER;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getselect_2(){ return _select_2; }
         void setselect_2(ASTNodeToken _select_2){ this._select_2 = _select_2; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SelectStmt_select_2(IToken leftIToken, IToken rightIToken,
                            ASTNodeToken _select_2,
                            ASTNodeToken _IDENTIFIER,
                            ParameterItemList _UtilFunctionParameterList,
                            ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._select_2 = _select_2;
            (_select_2 as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _select_2)  list.add(_select_2);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSelectStmt_select_2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSelectStmt_select_2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSelectStmt_select_2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSelectStmt_select_2(this, o); }
        @override
        int getRuleIndex() { return 216 ;}
    }

/**
 *<b>
*<li>Rule 217:  DeleteStmt ::= delete UtilFunctionParameterList CRLF
 *</b>
 */
class DeleteStmt_delete extends ASTNode implements IDeleteStmt
    {
         late ASTNodeToken _delete;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getdelete(){ return _delete; }
         void setdelete(ASTNodeToken _delete){ this._delete = _delete; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        DeleteStmt_delete(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _delete,
                          ParameterItemList _UtilFunctionParameterList,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._delete = _delete;
            (_delete as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _delete)  list.add(_delete);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitDeleteStmt_delete(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitDeleteStmt_delete(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitDeleteStmt_delete(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitDeleteStmt_delete(this, o); }
        @override
        int getRuleIndex() { return 217 ;}
    }

/**
 *<b>
*<li>Rule 218:  DeleteStmt ::= delete_2 UtilFunctionParameterList CRLF
 *</b>
 */
class DeleteStmt_delete_2 extends ASTNode implements IDeleteStmt
    {
         late ASTNodeToken _delete_2;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getdelete_2(){ return _delete_2; }
         void setdelete_2(ASTNodeToken _delete_2){ this._delete_2 = _delete_2; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        DeleteStmt_delete_2(IToken leftIToken, IToken rightIToken,
                            ASTNodeToken _delete_2,
                            ParameterItemList _UtilFunctionParameterList,
                            ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._delete_2 = _delete_2;
            (_delete_2 as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _delete_2)  list.add(_delete_2);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitDeleteStmt_delete_2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitDeleteStmt_delete_2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitDeleteStmt_delete_2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitDeleteStmt_delete_2(this, o); }
        @override
        int getRuleIndex() { return 218 ;}
    }

/**
 *<b>
*<li>Rule 219:  Apdu2Stmt ::= apdu2 ApduDataList CRLF
 *</b>
 */
class Apdu2Stmt extends ASTNode implements IApdu2Stmt
    {
         late ASTNodeToken _apdu2;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getapdu2(){ return _apdu2; }
         void setapdu2(ASTNodeToken _apdu2){ this._apdu2 = _apdu2; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        Apdu2Stmt(IToken leftIToken, IToken rightIToken,
                  ASTNodeToken _apdu2,
                  ApduDataList _ApduDataList,
                  ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._apdu2 = _apdu2;
            (_apdu2 as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _apdu2)  list.add(_apdu2);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitApdu2Stmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitApdu2Stmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitApdu2Stmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitApdu2Stmt(this, o); }
        @override
        int getRuleIndex() { return 219 ;}
    }

/**
 *<b>
*<li>Rule 220:  PromptStmt ::= prompt OnOffOption CRLF
 *</b>
 */
class PromptStmt extends ASTNode implements IPromptStmt
    {
         late ASTNodeToken _prompt;
         late ASTNode _OnOffOption;
         late ASTNodeToken _CRLF;

         ASTNodeToken getprompt(){ return _prompt; }
         void setprompt(ASTNodeToken _prompt){ this._prompt = _prompt; }
         ASTNode getOnOffOption(){ return _OnOffOption; }
         void setOnOffOption(ASTNode _OnOffOption){ this._OnOffOption = _OnOffOption; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        PromptStmt(IToken leftIToken, IToken rightIToken,
                   ASTNodeToken _prompt,
                   ASTNode _OnOffOption,
                   ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._prompt = _prompt;
            (_prompt as ASTNode).setParent(this);
            this._OnOffOption = _OnOffOption;
            (_OnOffOption as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _prompt)  list.add(_prompt);
            if(null != _OnOffOption)  list.add(_OnOffOption);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPromptStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPromptStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPromptStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPromptStmt(this, o); }
        @override
        int getRuleIndex() { return 220 ;}
    }

/**
 *<b>
*<li>Rule 221:  ShowapduStmt ::= showapdu OnOffOption CRLF
 *</b>
 */
class ShowapduStmt extends ASTNode implements IShowapduStmt
    {
         late ASTNodeToken _showapdu;
         late ASTNode _OnOffOption;
         late ASTNodeToken _CRLF;

         ASTNodeToken getshowapdu(){ return _showapdu; }
         void setshowapdu(ASTNodeToken _showapdu){ this._showapdu = _showapdu; }
         ASTNode getOnOffOption(){ return _OnOffOption; }
         void setOnOffOption(ASTNode _OnOffOption){ this._OnOffOption = _OnOffOption; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        ShowapduStmt(IToken leftIToken, IToken rightIToken,
                     ASTNodeToken _showapdu,
                     ASTNode _OnOffOption,
                     ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._showapdu = _showapdu;
            (_showapdu as ASTNode).setParent(this);
            this._OnOffOption = _OnOffOption;
            (_OnOffOption as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _showapdu)  list.add(_showapdu);
            if(null != _OnOffOption)  list.add(_OnOffOption);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitShowapduStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitShowapduStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitShowapduStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitShowapduStmt(this, o); }
        @override
        int getRuleIndex() { return 221 ;}
    }

/**
 *<b>
*<li>Rule 222:  Des_3des_mac_call ::= des_3des_mac ( ArgumentList )
 *</b>
 */
class Des_3des_mac_call extends ASTNode implements IDes_3des_mac_call
    {
         late ASTNodeToken _des_3des_mac;
         late ASTNodeToken _LPAREN;
         late ExpressionList _ArgumentList;
         late ASTNodeToken _RPAREN;

         ASTNodeToken getdes_3des_mac(){ return _des_3des_mac; }
         void setdes_3des_mac(ASTNodeToken _des_3des_mac){ this._des_3des_mac = _des_3des_mac; }
         ASTNodeToken getLPAREN(){ return _LPAREN; }
         void setLPAREN(ASTNodeToken _LPAREN){ this._LPAREN = _LPAREN; }
         ExpressionList getArgumentList(){ return _ArgumentList; }
         void setArgumentList(ExpressionList _ArgumentList){ this._ArgumentList = _ArgumentList; }
         ASTNodeToken getRPAREN(){ return _RPAREN; }
         void setRPAREN(ASTNodeToken _RPAREN){ this._RPAREN = _RPAREN; }

        Des_3des_mac_call(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _des_3des_mac,
                          ASTNodeToken _LPAREN,
                          ExpressionList _ArgumentList,
                          ASTNodeToken _RPAREN)
            :super(leftIToken, rightIToken)

        {
            this._des_3des_mac = _des_3des_mac;
            (_des_3des_mac as ASTNode).setParent(this);
            this._LPAREN = _LPAREN;
            (_LPAREN as ASTNode).setParent(this);
            this._ArgumentList = _ArgumentList;
            (_ArgumentList as ASTNode).setParent(this);
            this._RPAREN = _RPAREN;
            (_RPAREN as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _des_3des_mac)  list.add(_des_3des_mac);
            if(null != _LPAREN)  list.add(_LPAREN);
            if(null != _ArgumentList)  list.add(_ArgumentList);
            if(null != _RPAREN)  list.add(_RPAREN);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitDes_3des_mac_call(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitDes_3des_mac_call(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitDes_3des_mac_call(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitDes_3des_mac_call(this, o); }
        @override
        int getRuleIndex() { return 222 ;}
    }

/**
 *<b>
*<li>Rule 223:  Des_3des_mac_Stmt ::= des_3des_mac ApduDataList CRLF
 *</b>
 */
class Des_3des_mac_Stmt extends ASTNode implements IDes_3des_mac_Stmt
    {
         late ASTNodeToken _des_3des_mac;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getdes_3des_mac(){ return _des_3des_mac; }
         void setdes_3des_mac(ASTNodeToken _des_3des_mac){ this._des_3des_mac = _des_3des_mac; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        Des_3des_mac_Stmt(IToken leftIToken, IToken rightIToken,
                          ASTNodeToken _des_3des_mac,
                          ApduDataList _ApduDataList,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._des_3des_mac = _des_3des_mac;
            (_des_3des_mac as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _des_3des_mac)  list.add(_des_3des_mac);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitDes_3des_mac_Stmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitDes_3des_mac_Stmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitDes_3des_mac_Stmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitDes_3des_mac_Stmt(this, o); }
        @override
        int getRuleIndex() { return 223 ;}
    }

/**
 *<b>
*<li>Rule 224:  Full_3des_mac_call ::= full_3des_mac ( ArgumentList )
 *</b>
 */
class Full_3des_mac_call extends ASTNode implements IFull_3des_mac_call
    {
         late ASTNodeToken _full_3des_mac;
         late ASTNodeToken _LPAREN;
         late ExpressionList _ArgumentList;
         late ASTNodeToken _RPAREN;

         ASTNodeToken getfull_3des_mac(){ return _full_3des_mac; }
         void setfull_3des_mac(ASTNodeToken _full_3des_mac){ this._full_3des_mac = _full_3des_mac; }
         ASTNodeToken getLPAREN(){ return _LPAREN; }
         void setLPAREN(ASTNodeToken _LPAREN){ this._LPAREN = _LPAREN; }
         ExpressionList getArgumentList(){ return _ArgumentList; }
         void setArgumentList(ExpressionList _ArgumentList){ this._ArgumentList = _ArgumentList; }
         ASTNodeToken getRPAREN(){ return _RPAREN; }
         void setRPAREN(ASTNodeToken _RPAREN){ this._RPAREN = _RPAREN; }

        Full_3des_mac_call(IToken leftIToken, IToken rightIToken,
                           ASTNodeToken _full_3des_mac,
                           ASTNodeToken _LPAREN,
                           ExpressionList _ArgumentList,
                           ASTNodeToken _RPAREN)
            :super(leftIToken, rightIToken)

        {
            this._full_3des_mac = _full_3des_mac;
            (_full_3des_mac as ASTNode).setParent(this);
            this._LPAREN = _LPAREN;
            (_LPAREN as ASTNode).setParent(this);
            this._ArgumentList = _ArgumentList;
            (_ArgumentList as ASTNode).setParent(this);
            this._RPAREN = _RPAREN;
            (_RPAREN as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _full_3des_mac)  list.add(_full_3des_mac);
            if(null != _LPAREN)  list.add(_LPAREN);
            if(null != _ArgumentList)  list.add(_ArgumentList);
            if(null != _RPAREN)  list.add(_RPAREN);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitFull_3des_mac_call(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitFull_3des_mac_call(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitFull_3des_mac_call(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitFull_3des_mac_call(this, o); }
        @override
        int getRuleIndex() { return 224 ;}
    }

/**
 *<b>
*<li>Rule 225:  Full_3des_mac_Stmt ::= full_3des_mac ApduDataList CRLF
 *</b>
 */
class Full_3des_mac_Stmt extends ASTNode implements IFull_3des_mac_Stmt
    {
         late ASTNodeToken _full_3des_mac;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getfull_3des_mac(){ return _full_3des_mac; }
         void setfull_3des_mac(ASTNodeToken _full_3des_mac){ this._full_3des_mac = _full_3des_mac; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        Full_3des_mac_Stmt(IToken leftIToken, IToken rightIToken,
                           ASTNodeToken _full_3des_mac,
                           ApduDataList _ApduDataList,
                           ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._full_3des_mac = _full_3des_mac;
            (_full_3des_mac as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _full_3des_mac)  list.add(_full_3des_mac);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitFull_3des_mac_Stmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitFull_3des_mac_Stmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitFull_3des_mac_Stmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitFull_3des_mac_Stmt(this, o); }
        @override
        int getRuleIndex() { return 225 ;}
    }

/**
 *<b>
*<li>Rule 226:  Mac_auto_mac_option ::= mac_auto_mac
 *</b>
 */
class Mac_auto_mac_option extends ASTNodeToken implements IMac_auto_mac_option
    {
         IToken getmac_auto_mac(){ return leftIToken; }

    Mac_auto_mac_option(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitMac_auto_mac_option(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitMac_auto_mac_option(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitMac_auto_mac_option(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitMac_auto_mac_option(this, o); }
        @override
        int getRuleIndex() { return 226 ;}
    }

/**
 *<b>
*<li>Rule 227:  Mac_auto_mac_option ::= mac_auto_mac_2
 *</b>
 */
class Mac_auto_mac_option2 extends ASTNodeToken implements IMac_auto_mac_option
    {
         IToken getmac_auto_mac_2(){ return leftIToken; }

    Mac_auto_mac_option2(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitMac_auto_mac_option2(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitMac_auto_mac_option2(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitMac_auto_mac_option2(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitMac_auto_mac_option2(this, o); }
        @override
        int getRuleIndex() { return 227 ;}
    }

/**
 *<b>
*<li>Rule 228:  Mac_auto_mac_Stmt ::= Mac_auto_mac_option ApduDataList CRLF
 *</b>
 */
class Mac_auto_mac_Stmt extends ASTNode implements IMac_auto_mac_Stmt
    {
         late ASTNode _Mac_auto_mac_option;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _CRLF;

         ASTNode getMac_auto_mac_option(){ return _Mac_auto_mac_option; }
         void setMac_auto_mac_option(ASTNode _Mac_auto_mac_option){ this._Mac_auto_mac_option = _Mac_auto_mac_option; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        Mac_auto_mac_Stmt(IToken leftIToken, IToken rightIToken,
                          ASTNode _Mac_auto_mac_option,
                          ApduDataList _ApduDataList,
                          ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._Mac_auto_mac_option = _Mac_auto_mac_option;
            (_Mac_auto_mac_option as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _Mac_auto_mac_option)  list.add(_Mac_auto_mac_option);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitMac_auto_mac_Stmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitMac_auto_mac_Stmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitMac_auto_mac_Stmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitMac_auto_mac_Stmt(this, o); }
        @override
        int getRuleIndex() { return 228 ;}
    }

/**
 *<em>
*<li>Rule 229:  LineEndOpt ::= %Empty
 *</em>
 *<p>
 *<b>
*<li>Rule 230:  LineEndOpt ::= CRLF
 *</b>
 */
class LineEndOpt extends ASTNodeToken implements ILineEndOpt
    {
         IToken getCRLF(){ return leftIToken; }

    LineEndOpt(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitLineEndOpt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitLineEndOpt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitLineEndOpt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitLineEndOpt(this, o); }
        @override
        int getRuleIndex() { return 230 ;}
    }

/**
 *<b>
*<li>Rule 231:  SuperlongStmt ::= superlong { LineEndOpt ApduDataList } CRLF
 *</b>
 */
class SuperlongStmtInOneLine extends ASTNode implements ISuperlongStmt
    {
         late ASTNodeToken _superlong;
         late ASTNodeToken _LBRACE;
         late LineEndOpt? _LineEndOpt;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _RBRACE;
         late ASTNodeToken _CRLF;

         ASTNodeToken getsuperlong(){ return _superlong; }
         void setsuperlong(ASTNodeToken _superlong){ this._superlong = _superlong; }
         ASTNodeToken getLBRACE(){ return _LBRACE; }
         void setLBRACE(ASTNodeToken _LBRACE){ this._LBRACE = _LBRACE; }
        /**
         * The value returned by <b>getLineEndOpt</b> may be <b>null</b>
         */
         LineEndOpt ?  getLineEndOpt(){ return _LineEndOpt; }
         void setLineEndOpt(LineEndOpt _LineEndOpt){ this._LineEndOpt = _LineEndOpt; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getRBRACE(){ return _RBRACE; }
         void setRBRACE(ASTNodeToken _RBRACE){ this._RBRACE = _RBRACE; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SuperlongStmtInOneLine(IToken leftIToken, IToken rightIToken,
                               ASTNodeToken _superlong,
                               ASTNodeToken _LBRACE,
                               LineEndOpt? _LineEndOpt,
                               ApduDataList _ApduDataList,
                               ASTNodeToken _RBRACE,
                               ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._superlong = _superlong;
            (_superlong as ASTNode).setParent(this);
            this._LBRACE = _LBRACE;
            (_LBRACE as ASTNode).setParent(this);
            this._LineEndOpt = _LineEndOpt;
            if (null != _LineEndOpt) (_LineEndOpt as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._RBRACE = _RBRACE;
            (_RBRACE as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _superlong)  list.add(_superlong);
            if(null != _LBRACE)  list.add(_LBRACE);
            if(null != _LineEndOpt)  list.add(_LineEndOpt);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _RBRACE)  list.add(_RBRACE);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSuperlongStmtInOneLine(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSuperlongStmtInOneLine(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSuperlongStmtInOneLine(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSuperlongStmtInOneLine(this, o); }
        @override
        int getRuleIndex() { return 231 ;}
    }

/**
 *<b>
*<li>Rule 234:  SuperlongStmt ::= superlong { LineEndOpt MultipleLineApduDataList } CRLF
 *</b>
 */
class SuperlongStmtInMutipleLines extends ASTNode implements ISuperlongStmt
    {
         late ASTNodeToken _superlong;
         late ASTNodeToken _LBRACE;
         late LineEndOpt? _LineEndOpt;
         late ApduDataList _MultipleLineApduDataList;
         late ASTNodeToken _RBRACE;
         late ASTNodeToken _CRLF;

         ASTNodeToken getsuperlong(){ return _superlong; }
         void setsuperlong(ASTNodeToken _superlong){ this._superlong = _superlong; }
         ASTNodeToken getLBRACE(){ return _LBRACE; }
         void setLBRACE(ASTNodeToken _LBRACE){ this._LBRACE = _LBRACE; }
        /**
         * The value returned by <b>getLineEndOpt</b> may be <b>null</b>
         */
         LineEndOpt ?  getLineEndOpt(){ return _LineEndOpt; }
         void setLineEndOpt(LineEndOpt _LineEndOpt){ this._LineEndOpt = _LineEndOpt; }
         ApduDataList getMultipleLineApduDataList(){ return _MultipleLineApduDataList; }
         void setMultipleLineApduDataList(ApduDataList _MultipleLineApduDataList){ this._MultipleLineApduDataList = _MultipleLineApduDataList; }
         ASTNodeToken getRBRACE(){ return _RBRACE; }
         void setRBRACE(ASTNodeToken _RBRACE){ this._RBRACE = _RBRACE; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SuperlongStmtInMutipleLines(IToken leftIToken, IToken rightIToken,
                                    ASTNodeToken _superlong,
                                    ASTNodeToken _LBRACE,
                                    LineEndOpt? _LineEndOpt,
                                    ApduDataList _MultipleLineApduDataList,
                                    ASTNodeToken _RBRACE,
                                    ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._superlong = _superlong;
            (_superlong as ASTNode).setParent(this);
            this._LBRACE = _LBRACE;
            (_LBRACE as ASTNode).setParent(this);
            this._LineEndOpt = _LineEndOpt;
            if (null != _LineEndOpt) (_LineEndOpt as ASTNode).setParent(this);
            this._MultipleLineApduDataList = _MultipleLineApduDataList;
            (_MultipleLineApduDataList as ASTNode).setParent(this);
            this._RBRACE = _RBRACE;
            (_RBRACE as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _superlong)  list.add(_superlong);
            if(null != _LBRACE)  list.add(_LBRACE);
            if(null != _LineEndOpt)  list.add(_LineEndOpt);
            if(null != _MultipleLineApduDataList)  list.add(_MultipleLineApduDataList);
            if(null != _RBRACE)  list.add(_RBRACE);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSuperlongStmtInMutipleLines(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSuperlongStmtInMutipleLines(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSuperlongStmtInMutipleLines(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSuperlongStmtInMutipleLines(this, o); }
        @override
        int getRuleIndex() { return 234 ;}
    }

/**
 *<b>
*<li>Rule 235:  CompareStmt ::= compare UtilFunctionParameterList CRLF
 *</b>
 */
class CompareStmt extends ASTNode implements ICompareStmt
    {
         late ASTNodeToken _compare;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getcompare(){ return _compare; }
         void setcompare(ASTNodeToken _compare){ this._compare = _compare; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        CompareStmt(IToken leftIToken, IToken rightIToken,
                    ASTNodeToken _compare,
                    ParameterItemList _UtilFunctionParameterList,
                    ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._compare = _compare;
            (_compare as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _compare)  list.add(_compare);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitCompareStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitCompareStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitCompareStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitCompareStmt(this, o); }
        @override
        int getRuleIndex() { return 235 ;}
    }

/**
 *<b>
*<li>Rule 236:  Socket_messageStmt ::= socket_message UtilFunctionParameterList CRLF
 *</b>
 */
class Socket_messageStmt extends ASTNode implements ISocket_messageStmt
    {
         late ASTNodeToken _socket_message;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getsocket_message(){ return _socket_message; }
         void setsocket_message(ASTNodeToken _socket_message){ this._socket_message = _socket_message; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        Socket_messageStmt(IToken leftIToken, IToken rightIToken,
                           ASTNodeToken _socket_message,
                           ParameterItemList _UtilFunctionParameterList,
                           ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._socket_message = _socket_message;
            (_socket_message as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _socket_message)  list.add(_socket_message);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSocket_messageStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSocket_messageStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSocket_messageStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSocket_messageStmt(this, o); }
        @override
        int getRuleIndex() { return 236 ;}
    }

/**
 *<b>
*<li>Rule 237:  GenerateStmt ::= generate IDENTIFIER UtilFunctionParameterList CRLF
 *</b>
 */
class GenerateStmt extends ASTNode implements IGenerateStmt
    {
         late ASTNodeToken _generate;
         late ASTNodeToken _IDENTIFIER;
         late ParameterItemList _UtilFunctionParameterList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getgenerate(){ return _generate; }
         void setgenerate(ASTNodeToken _generate){ this._generate = _generate; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ParameterItemList getUtilFunctionParameterList(){ return _UtilFunctionParameterList; }
         void setUtilFunctionParameterList(ParameterItemList _UtilFunctionParameterList){ this._UtilFunctionParameterList = _UtilFunctionParameterList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        GenerateStmt(IToken leftIToken, IToken rightIToken,
                     ASTNodeToken _generate,
                     ASTNodeToken _IDENTIFIER,
                     ParameterItemList _UtilFunctionParameterList,
                     ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._generate = _generate;
            (_generate as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._UtilFunctionParameterList = _UtilFunctionParameterList;
            (_UtilFunctionParameterList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _generate)  list.add(_generate);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _UtilFunctionParameterList)  list.add(_UtilFunctionParameterList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitGenerateStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitGenerateStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitGenerateStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitGenerateStmt(this, o); }
        @override
        int getRuleIndex() { return 237 ;}
    }

/**
 *<b>
*<li>Rule 238:  SendtextStmt ::= sendtext Expression CRLF
 *</b>
 */
class SendtextStmt extends ASTNode implements ISendtextStmt
    {
         late ASTNodeToken _sendtext;
         late ASTNode _Expression;
         late ASTNodeToken _CRLF;

         ASTNodeToken getsendtext(){ return _sendtext; }
         void setsendtext(ASTNodeToken _sendtext){ this._sendtext = _sendtext; }
         ASTNode getExpression(){ return _Expression; }
         void setExpression(ASTNode _Expression){ this._Expression = _Expression; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        SendtextStmt(IToken leftIToken, IToken rightIToken,
                     ASTNodeToken _sendtext,
                     ASTNode _Expression,
                     ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._sendtext = _sendtext;
            (_sendtext as ASTNode).setParent(this);
            this._Expression = _Expression;
            (_Expression as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _sendtext)  list.add(_sendtext);
            if(null != _Expression)  list.add(_Expression);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitSendtextStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitSendtextStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitSendtextStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitSendtextStmt(this, o); }
        @override
        int getRuleIndex() { return 238 ;}
    }

/**
 *<b>
*<li>Rule 239:  PushStmt ::= push ApduDataList CRLF
 *</b>
 */
class PushStmt extends ASTNode implements IPushStmt
    {
         late ASTNodeToken _push;
         late ApduDataList _ApduDataList;
         late ASTNodeToken _CRLF;

         ASTNodeToken getpush(){ return _push; }
         void setpush(ASTNodeToken _push){ this._push = _push; }
         ApduDataList getApduDataList(){ return _ApduDataList; }
         void setApduDataList(ApduDataList _ApduDataList){ this._ApduDataList = _ApduDataList; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        PushStmt(IToken leftIToken, IToken rightIToken,
                 ASTNodeToken _push,
                 ApduDataList _ApduDataList,
                 ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._push = _push;
            (_push as ASTNode).setParent(this);
            this._ApduDataList = _ApduDataList;
            (_ApduDataList as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _push)  list.add(_push);
            if(null != _ApduDataList)  list.add(_ApduDataList);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitPushStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitPushStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitPushStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitPushStmt(this, o); }
        @override
        int getRuleIndex() { return 239 ;}
    }

/**
 *<b>
*<li>Rule 240:  GotoStmt ::= goto IDENTIFIER CRLF
 *</b>
 */
class GotoStmt extends ASTNode implements IGotoStmt
    {
         late ASTNodeToken _goto;
         late ASTNodeToken _IDENTIFIER;
         late ASTNodeToken _CRLF;

         ASTNodeToken getgoto(){ return _goto; }
         void setgoto(ASTNodeToken _goto){ this._goto = _goto; }
         ASTNodeToken getIDENTIFIER(){ return _IDENTIFIER; }
         void setIDENTIFIER(ASTNodeToken _IDENTIFIER){ this._IDENTIFIER = _IDENTIFIER; }
         ASTNodeToken getCRLF(){ return _CRLF; }
         void setCRLF(ASTNodeToken _CRLF){ this._CRLF = _CRLF; }

        GotoStmt(IToken leftIToken, IToken rightIToken,
                 ASTNodeToken _goto,
                 ASTNodeToken _IDENTIFIER,
                 ASTNodeToken _CRLF)
            :super(leftIToken, rightIToken)

        {
            this._goto = _goto;
            (_goto as ASTNode).setParent(this);
            this._IDENTIFIER = _IDENTIFIER;
            (_IDENTIFIER as ASTNode).setParent(this);
            this._CRLF = _CRLF;
            (_CRLF as ASTNode).setParent(this);
            initialize();
        }

        /**
         * A list of all children of this node, don't including the null ones.
         */
            ArrayList getAllChildren() 
        {
            var list = new ArrayList();
            if(null != _goto)  list.add(_goto);
            if(null != _IDENTIFIER)  list.add(_IDENTIFIER);
            if(null != _CRLF)  list.add(_CRLF);
            return list;
        }

          void acceptWithVisitor(Visitor v){ v.visitGotoStmt(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitGotoStmt(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitGotoStmt(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitGotoStmt(this, o); }
        @override
        int getRuleIndex() { return 240 ;}
    }

/**
 *<b>
*<li>Rule 66:  EmptyStatement ::= CRLF
 *</b>
 */
class EmptyStatement0 extends ASTNodeToken implements IEmptyStatement
    {
         IToken getCRLF(){ return leftIToken; }

    EmptyStatement0(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitEmptyStatement0(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitEmptyStatement0(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitEmptyStatement0(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitEmptyStatement0(this, o); }
        @override
        int getRuleIndex() { return 66 ;}
    }

/**
 *<b>
*<li>Rule 67:  EmptyStatement ::= ;
 *</b>
 */
class EmptyStatement1 extends ASTNodeToken implements IEmptyStatement
    {
         IToken getSEMICOLON(){ return leftIToken; }

    EmptyStatement1(IToken token) :super(token){ initialize(); }

          void acceptWithVisitor(Visitor v){ v.visitEmptyStatement1(this); }
         void acceptWithArg(ArgumentVisitor v, Object? o){ v.visitEmptyStatement1(this, o); }
         Object? acceptWithResult(ResultVisitor v) { return v.visitEmptyStatement1(this); }
          Object? acceptWithResultArgument(ResultArgumentVisitor v, Object? o)  { return v.visitEmptyStatement1(this, o); }
        @override
        int getRuleIndex() { return 67 ;}
    }

abstract class Visitor
    {
       void visitASTNodeToken(ASTNodeToken n);
       void visitSnooperProg(SnooperProg n);
       void visitSnooperSegmentItemList(SnooperSegmentItemList n);
       void visitReturnStmt(ReturnStmt n);
       void visitSimpleName(SimpleName n);
       void visitSimpleNameList(SimpleNameList n);
       void visitCallSignature(CallSignature n);
       void visitFunctionDecl(FunctionDecl n);
       void visitStatementList_StatementList(StatementList_StatementList n);
       void visitStatementList(StatementList n);
       void visitIfSeg(IfSeg n);
       void visitIfThenStatement(IfThenStatement n);
       void visitElseSeg(ElseSeg n);
       void visitIfThenElseStatement(IfThenElseStatement n);
       void visitElseIfStatementItemList(ElseIfStatementItemList n);
       void visitElseIfStatementItem(ElseIfStatementItem n);
       void visitVariable(Variable n);
       void visitBadVariable(BadVariable n);
       void visitLetOpt(LetOpt n);
       void visitVariableStmt(VariableStmt n);
       void visitPrimaryAssignmentStmt(PrimaryAssignmentStmt n);
       void visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide n);
       void visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt n);
       void visitKeywordAssignmentStmt(KeywordAssignmentStmt n);
       void visitBadAssignment(BadAssignment n);
       void visitDoLoopStmt(DoLoopStmt n);
       void visitStepStmOpt(StepStmOpt n);
       void visitForStmt(ForStmt n);
       void visitNextSeg(NextSeg n);
       void visitHforStmt(HforStmt n);
       void visitHnexSeg(HnexSeg n);
       void visitNumberLiteral(NumberLiteral n);
       void visitStringLiteral(StringLiteral n);
       void visitArrayAccess(ArrayAccess n);
       void visitHexMacroPrimary(HexMacroPrimary n);
       void visitApduDataWith3Lc(ApduDataWith3Lc n);
       void visitApduDataWith2Lc(ApduDataWith2Lc n);
       void visitApduDataWith4Lc(ApduDataWith4Lc n);
       void visitApduDataWithoutLc(ApduDataWithoutLc n);
       void visitApduDataList(ApduDataList n);
       void visitPostIncrementExpression(PostIncrementExpression n);
       void visitPostDecrementExpression(PostDecrementExpression n);
       void visitPreIncrementExpression(PreIncrementExpression n);
       void visitPreDecrementExpression(PreDecrementExpression n);
       void visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor n);
       void visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not n);
       void visitMultiplicativeExp_Divide(MultiplicativeExp_Divide n);
       void visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply n);
       void visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder n);
       void visitAdditiveExp_Plus(AdditiveExp_Plus n);
       void visitAdditiveExp_Minus(AdditiveExp_Minus n);
       void visitShiftExp_Left(ShiftExp_Left n);
       void visitShiftExp_Right(ShiftExp_Right n);
       void visitRelationalExp_Less(RelationalExp_Less n);
       void visitRelationalExp_Greater(RelationalExp_Greater n);
       void visitRelationalExp_LessEqual(RelationalExp_LessEqual n);
       void visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual n);
       void visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual n);
       void visitEqualityExpr_NotEqual(EqualityExpr_NotEqual n);
       void visitAndExpression(AndExpression n);
       void visitExclusiveOrExpression(ExclusiveOrExpression n);
       void visitInclusiveOrExpression(InclusiveOrExpression n);
       void visitConditionalAndExpression(ConditionalAndExpression n);
       void visitConditionalOrExpression(ConditionalOrExpression n);
       void visitExpressionStmt(ExpressionStmt n);
       void visitVariableAndSW(VariableAndSW n);
       void visitExpressionList(ExpressionList n);
       void visitCallOpt(CallOpt n);
       void visitFunctionCall(FunctionCall n);
       void visitExitForStatement(ExitForStatement n);
       void visitExitHforStatement(ExitHforStatement n);
       void visitLoadOption_load_script(LoadOption_load_script n);
       void visitLoadOption_loadprofile(LoadOption_loadprofile n);
       void visitLoadOption_run_script(LoadOption_run_script n);
       void visitLoadScriptStmt(LoadScriptStmt n);
       void visitSimpleOption_timer_begin(SimpleOption_timer_begin n);
       void visitSimpleOption_timer_end(SimpleOption_timer_end n);
       void visitSimpleOption_pause(SimpleOption_pause n);
       void visitSimpleOption_file(SimpleOption_file n);
       void visitSimpleOption_line(SimpleOption_line n);
       void visitSimpleOption_clear_fifo(SimpleOption_clear_fifo n);
       void visitSimpleOption_beep(SimpleOption_beep n);
       void visitSimpleOption_eject(SimpleOption_eject n);
       void visitSimpleOption_insert(SimpleOption_insert n);
       void visitSimpleOption_split(SimpleOption_split n);
       void visitSimpleOption_end(SimpleOption_end n);
       void visitSimpleOption_clear(SimpleOption_clear n);
       void visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt n);
       void visitSleepStmt(SleepStmt n);
       void visitSetStmt_Identifier(SetStmt_Identifier n);
       void visitSetStmt_MacroName(SetStmt_MacroName n);
       void visitPrintStmt_Message(PrintStmt_Message n);
       void visitPrintStmt_Quqstion(PrintStmt_Quqstion n);
       void visitOnOffOption_on(OnOffOption_on n);
       void visitOnOffOption_off(OnOffOption_off n);
       void visitAutoResponseStmt(AutoResponseStmt n);
       void visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier n);
       void visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName n);
       void visitUploadStmt_upload(UploadStmt_upload n);
       void visitUploadStmt_upload2(UploadStmt_upload2 n);
       void visitResetStmt_reset(ResetStmt_reset n);
       void visitResetStmt_reset2(ResetStmt_reset2 n);
       void visitResetStmt_reset_cold(ResetStmt_reset_cold n);
       void visitResetStmt_reset2_cold(ResetStmt_reset2_cold n);
       void visitInstallParameterList(InstallParameterList n);
       void visitInstallStmt_install(InstallStmt_install n);
       void visitInstallStmt_install_2(InstallStmt_install_2 n);
       void visitParameterItem(ParameterItem n);
       void visitParameterItemList(ParameterItemList n);
       void visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth n);
       void visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc n);
       void visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2 n);
       void visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2 n);
       void visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock n);
       void visitSelectStmt_select(SelectStmt_select n);
       void visitSelectStmt_select_2(SelectStmt_select_2 n);
       void visitDeleteStmt_delete(DeleteStmt_delete n);
       void visitDeleteStmt_delete_2(DeleteStmt_delete_2 n);
       void visitApdu2Stmt(Apdu2Stmt n);
       void visitPromptStmt(PromptStmt n);
       void visitShowapduStmt(ShowapduStmt n);
       void visitDes_3des_mac_call(Des_3des_mac_call n);
       void visitDes_3des_mac_Stmt(Des_3des_mac_Stmt n);
       void visitFull_3des_mac_call(Full_3des_mac_call n);
       void visitFull_3des_mac_Stmt(Full_3des_mac_Stmt n);
       void visitMac_auto_mac_option(Mac_auto_mac_option n);
       void visitMac_auto_mac_option2(Mac_auto_mac_option2 n);
       void visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt n);
       void visitLineEndOpt(LineEndOpt n);
       void visitSuperlongStmtInOneLine(SuperlongStmtInOneLine n);
       void visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines n);
       void visitCompareStmt(CompareStmt n);
       void visitSocket_messageStmt(Socket_messageStmt n);
       void visitGenerateStmt(GenerateStmt n);
       void visitSendtextStmt(SendtextStmt n);
       void visitPushStmt(PushStmt n);
       void visitGotoStmt(GotoStmt n);
       void visitEmptyStatement0(EmptyStatement0 n);
       void visitEmptyStatement1(EmptyStatement1 n);

       void visit(ASTNode n);
    }
abstract class ArgumentVisitor
    {
       void visitASTNodeToken(ASTNodeToken n, Object? o);
       void visitSnooperProg(SnooperProg n, Object? o);
       void visitSnooperSegmentItemList(SnooperSegmentItemList n, Object? o);
       void visitReturnStmt(ReturnStmt n, Object? o);
       void visitSimpleName(SimpleName n, Object? o);
       void visitSimpleNameList(SimpleNameList n, Object? o);
       void visitCallSignature(CallSignature n, Object? o);
       void visitFunctionDecl(FunctionDecl n, Object? o);
       void visitStatementList_StatementList(StatementList_StatementList n, Object? o);
       void visitStatementList(StatementList n, Object? o);
       void visitIfSeg(IfSeg n, Object? o);
       void visitIfThenStatement(IfThenStatement n, Object? o);
       void visitElseSeg(ElseSeg n, Object? o);
       void visitIfThenElseStatement(IfThenElseStatement n, Object? o);
       void visitElseIfStatementItemList(ElseIfStatementItemList n, Object? o);
       void visitElseIfStatementItem(ElseIfStatementItem n, Object? o);
       void visitVariable(Variable n, Object? o);
       void visitBadVariable(BadVariable n, Object? o);
       void visitLetOpt(LetOpt n, Object? o);
       void visitVariableStmt(VariableStmt n, Object? o);
       void visitPrimaryAssignmentStmt(PrimaryAssignmentStmt n, Object? o);
       void visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide n, Object? o);
       void visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt n, Object? o);
       void visitKeywordAssignmentStmt(KeywordAssignmentStmt n, Object? o);
       void visitBadAssignment(BadAssignment n, Object? o);
       void visitDoLoopStmt(DoLoopStmt n, Object? o);
       void visitStepStmOpt(StepStmOpt n, Object? o);
       void visitForStmt(ForStmt n, Object? o);
       void visitNextSeg(NextSeg n, Object? o);
       void visitHforStmt(HforStmt n, Object? o);
       void visitHnexSeg(HnexSeg n, Object? o);
       void visitNumberLiteral(NumberLiteral n, Object? o);
       void visitStringLiteral(StringLiteral n, Object? o);
       void visitArrayAccess(ArrayAccess n, Object? o);
       void visitHexMacroPrimary(HexMacroPrimary n, Object? o);
       void visitApduDataWith3Lc(ApduDataWith3Lc n, Object? o);
       void visitApduDataWith2Lc(ApduDataWith2Lc n, Object? o);
       void visitApduDataWith4Lc(ApduDataWith4Lc n, Object? o);
       void visitApduDataWithoutLc(ApduDataWithoutLc n, Object? o);
       void visitApduDataList(ApduDataList n, Object? o);
       void visitPostIncrementExpression(PostIncrementExpression n, Object? o);
       void visitPostDecrementExpression(PostDecrementExpression n, Object? o);
       void visitPreIncrementExpression(PreIncrementExpression n, Object? o);
       void visitPreDecrementExpression(PreDecrementExpression n, Object? o);
       void visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor n, Object? o);
       void visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not n, Object? o);
       void visitMultiplicativeExp_Divide(MultiplicativeExp_Divide n, Object? o);
       void visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply n, Object? o);
       void visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder n, Object? o);
       void visitAdditiveExp_Plus(AdditiveExp_Plus n, Object? o);
       void visitAdditiveExp_Minus(AdditiveExp_Minus n, Object? o);
       void visitShiftExp_Left(ShiftExp_Left n, Object? o);
       void visitShiftExp_Right(ShiftExp_Right n, Object? o);
       void visitRelationalExp_Less(RelationalExp_Less n, Object? o);
       void visitRelationalExp_Greater(RelationalExp_Greater n, Object? o);
       void visitRelationalExp_LessEqual(RelationalExp_LessEqual n, Object? o);
       void visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual n, Object? o);
       void visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual n, Object? o);
       void visitEqualityExpr_NotEqual(EqualityExpr_NotEqual n, Object? o);
       void visitAndExpression(AndExpression n, Object? o);
       void visitExclusiveOrExpression(ExclusiveOrExpression n, Object? o);
       void visitInclusiveOrExpression(InclusiveOrExpression n, Object? o);
       void visitConditionalAndExpression(ConditionalAndExpression n, Object? o);
       void visitConditionalOrExpression(ConditionalOrExpression n, Object? o);
       void visitExpressionStmt(ExpressionStmt n, Object? o);
       void visitVariableAndSW(VariableAndSW n, Object? o);
       void visitExpressionList(ExpressionList n, Object? o);
       void visitCallOpt(CallOpt n, Object? o);
       void visitFunctionCall(FunctionCall n, Object? o);
       void visitExitForStatement(ExitForStatement n, Object? o);
       void visitExitHforStatement(ExitHforStatement n, Object? o);
       void visitLoadOption_load_script(LoadOption_load_script n, Object? o);
       void visitLoadOption_loadprofile(LoadOption_loadprofile n, Object? o);
       void visitLoadOption_run_script(LoadOption_run_script n, Object? o);
       void visitLoadScriptStmt(LoadScriptStmt n, Object? o);
       void visitSimpleOption_timer_begin(SimpleOption_timer_begin n, Object? o);
       void visitSimpleOption_timer_end(SimpleOption_timer_end n, Object? o);
       void visitSimpleOption_pause(SimpleOption_pause n, Object? o);
       void visitSimpleOption_file(SimpleOption_file n, Object? o);
       void visitSimpleOption_line(SimpleOption_line n, Object? o);
       void visitSimpleOption_clear_fifo(SimpleOption_clear_fifo n, Object? o);
       void visitSimpleOption_beep(SimpleOption_beep n, Object? o);
       void visitSimpleOption_eject(SimpleOption_eject n, Object? o);
       void visitSimpleOption_insert(SimpleOption_insert n, Object? o);
       void visitSimpleOption_split(SimpleOption_split n, Object? o);
       void visitSimpleOption_end(SimpleOption_end n, Object? o);
       void visitSimpleOption_clear(SimpleOption_clear n, Object? o);
       void visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt n, Object? o);
       void visitSleepStmt(SleepStmt n, Object? o);
       void visitSetStmt_Identifier(SetStmt_Identifier n, Object? o);
       void visitSetStmt_MacroName(SetStmt_MacroName n, Object? o);
       void visitPrintStmt_Message(PrintStmt_Message n, Object? o);
       void visitPrintStmt_Quqstion(PrintStmt_Quqstion n, Object? o);
       void visitOnOffOption_on(OnOffOption_on n, Object? o);
       void visitOnOffOption_off(OnOffOption_off n, Object? o);
       void visitAutoResponseStmt(AutoResponseStmt n, Object? o);
       void visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier n, Object? o);
       void visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName n, Object? o);
       void visitUploadStmt_upload(UploadStmt_upload n, Object? o);
       void visitUploadStmt_upload2(UploadStmt_upload2 n, Object? o);
       void visitResetStmt_reset(ResetStmt_reset n, Object? o);
       void visitResetStmt_reset2(ResetStmt_reset2 n, Object? o);
       void visitResetStmt_reset_cold(ResetStmt_reset_cold n, Object? o);
       void visitResetStmt_reset2_cold(ResetStmt_reset2_cold n, Object? o);
       void visitInstallParameterList(InstallParameterList n, Object? o);
       void visitInstallStmt_install(InstallStmt_install n, Object? o);
       void visitInstallStmt_install_2(InstallStmt_install_2 n, Object? o);
       void visitParameterItem(ParameterItem n, Object? o);
       void visitParameterItemList(ParameterItemList n, Object? o);
       void visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth n, Object? o);
       void visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc n, Object? o);
       void visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2 n, Object? o);
       void visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2 n, Object? o);
       void visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock n, Object? o);
       void visitSelectStmt_select(SelectStmt_select n, Object? o);
       void visitSelectStmt_select_2(SelectStmt_select_2 n, Object? o);
       void visitDeleteStmt_delete(DeleteStmt_delete n, Object? o);
       void visitDeleteStmt_delete_2(DeleteStmt_delete_2 n, Object? o);
       void visitApdu2Stmt(Apdu2Stmt n, Object? o);
       void visitPromptStmt(PromptStmt n, Object? o);
       void visitShowapduStmt(ShowapduStmt n, Object? o);
       void visitDes_3des_mac_call(Des_3des_mac_call n, Object? o);
       void visitDes_3des_mac_Stmt(Des_3des_mac_Stmt n, Object? o);
       void visitFull_3des_mac_call(Full_3des_mac_call n, Object? o);
       void visitFull_3des_mac_Stmt(Full_3des_mac_Stmt n, Object? o);
       void visitMac_auto_mac_option(Mac_auto_mac_option n, Object? o);
       void visitMac_auto_mac_option2(Mac_auto_mac_option2 n, Object? o);
       void visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt n, Object? o);
       void visitLineEndOpt(LineEndOpt n, Object? o);
       void visitSuperlongStmtInOneLine(SuperlongStmtInOneLine n, Object? o);
       void visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines n, Object? o);
       void visitCompareStmt(CompareStmt n, Object? o);
       void visitSocket_messageStmt(Socket_messageStmt n, Object? o);
       void visitGenerateStmt(GenerateStmt n, Object? o);
       void visitSendtextStmt(SendtextStmt n, Object? o);
       void visitPushStmt(PushStmt n, Object? o);
       void visitGotoStmt(GotoStmt n, Object? o);
       void visitEmptyStatement0(EmptyStatement0 n, Object? o);
       void visitEmptyStatement1(EmptyStatement1 n, Object? o);

       void visit(ASTNode n, Object? o);
    }
abstract class ResultVisitor
    {
        Object? visitASTNodeToken(ASTNodeToken n);
        Object? visitSnooperProg(SnooperProg n);
        Object? visitSnooperSegmentItemList(SnooperSegmentItemList n);
        Object? visitReturnStmt(ReturnStmt n);
        Object? visitSimpleName(SimpleName n);
        Object? visitSimpleNameList(SimpleNameList n);
        Object? visitCallSignature(CallSignature n);
        Object? visitFunctionDecl(FunctionDecl n);
        Object? visitStatementList_StatementList(StatementList_StatementList n);
        Object? visitStatementList(StatementList n);
        Object? visitIfSeg(IfSeg n);
        Object? visitIfThenStatement(IfThenStatement n);
        Object? visitElseSeg(ElseSeg n);
        Object? visitIfThenElseStatement(IfThenElseStatement n);
        Object? visitElseIfStatementItemList(ElseIfStatementItemList n);
        Object? visitElseIfStatementItem(ElseIfStatementItem n);
        Object? visitVariable(Variable n);
        Object? visitBadVariable(BadVariable n);
        Object? visitLetOpt(LetOpt n);
        Object? visitVariableStmt(VariableStmt n);
        Object? visitPrimaryAssignmentStmt(PrimaryAssignmentStmt n);
        Object? visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide n);
        Object? visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt n);
        Object? visitKeywordAssignmentStmt(KeywordAssignmentStmt n);
        Object? visitBadAssignment(BadAssignment n);
        Object? visitDoLoopStmt(DoLoopStmt n);
        Object? visitStepStmOpt(StepStmOpt n);
        Object? visitForStmt(ForStmt n);
        Object? visitNextSeg(NextSeg n);
        Object? visitHforStmt(HforStmt n);
        Object? visitHnexSeg(HnexSeg n);
        Object? visitNumberLiteral(NumberLiteral n);
        Object? visitStringLiteral(StringLiteral n);
        Object? visitArrayAccess(ArrayAccess n);
        Object? visitHexMacroPrimary(HexMacroPrimary n);
        Object? visitApduDataWith3Lc(ApduDataWith3Lc n);
        Object? visitApduDataWith2Lc(ApduDataWith2Lc n);
        Object? visitApduDataWith4Lc(ApduDataWith4Lc n);
        Object? visitApduDataWithoutLc(ApduDataWithoutLc n);
        Object? visitApduDataList(ApduDataList n);
        Object? visitPostIncrementExpression(PostIncrementExpression n);
        Object? visitPostDecrementExpression(PostDecrementExpression n);
        Object? visitPreIncrementExpression(PreIncrementExpression n);
        Object? visitPreDecrementExpression(PreDecrementExpression n);
        Object? visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor n);
        Object? visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not n);
        Object? visitMultiplicativeExp_Divide(MultiplicativeExp_Divide n);
        Object? visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply n);
        Object? visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder n);
        Object? visitAdditiveExp_Plus(AdditiveExp_Plus n);
        Object? visitAdditiveExp_Minus(AdditiveExp_Minus n);
        Object? visitShiftExp_Left(ShiftExp_Left n);
        Object? visitShiftExp_Right(ShiftExp_Right n);
        Object? visitRelationalExp_Less(RelationalExp_Less n);
        Object? visitRelationalExp_Greater(RelationalExp_Greater n);
        Object? visitRelationalExp_LessEqual(RelationalExp_LessEqual n);
        Object? visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual n);
        Object? visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual n);
        Object? visitEqualityExpr_NotEqual(EqualityExpr_NotEqual n);
        Object? visitAndExpression(AndExpression n);
        Object? visitExclusiveOrExpression(ExclusiveOrExpression n);
        Object? visitInclusiveOrExpression(InclusiveOrExpression n);
        Object? visitConditionalAndExpression(ConditionalAndExpression n);
        Object? visitConditionalOrExpression(ConditionalOrExpression n);
        Object? visitExpressionStmt(ExpressionStmt n);
        Object? visitVariableAndSW(VariableAndSW n);
        Object? visitExpressionList(ExpressionList n);
        Object? visitCallOpt(CallOpt n);
        Object? visitFunctionCall(FunctionCall n);
        Object? visitExitForStatement(ExitForStatement n);
        Object? visitExitHforStatement(ExitHforStatement n);
        Object? visitLoadOption_load_script(LoadOption_load_script n);
        Object? visitLoadOption_loadprofile(LoadOption_loadprofile n);
        Object? visitLoadOption_run_script(LoadOption_run_script n);
        Object? visitLoadScriptStmt(LoadScriptStmt n);
        Object? visitSimpleOption_timer_begin(SimpleOption_timer_begin n);
        Object? visitSimpleOption_timer_end(SimpleOption_timer_end n);
        Object? visitSimpleOption_pause(SimpleOption_pause n);
        Object? visitSimpleOption_file(SimpleOption_file n);
        Object? visitSimpleOption_line(SimpleOption_line n);
        Object? visitSimpleOption_clear_fifo(SimpleOption_clear_fifo n);
        Object? visitSimpleOption_beep(SimpleOption_beep n);
        Object? visitSimpleOption_eject(SimpleOption_eject n);
        Object? visitSimpleOption_insert(SimpleOption_insert n);
        Object? visitSimpleOption_split(SimpleOption_split n);
        Object? visitSimpleOption_end(SimpleOption_end n);
        Object? visitSimpleOption_clear(SimpleOption_clear n);
        Object? visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt n);
        Object? visitSleepStmt(SleepStmt n);
        Object? visitSetStmt_Identifier(SetStmt_Identifier n);
        Object? visitSetStmt_MacroName(SetStmt_MacroName n);
        Object? visitPrintStmt_Message(PrintStmt_Message n);
        Object? visitPrintStmt_Quqstion(PrintStmt_Quqstion n);
        Object? visitOnOffOption_on(OnOffOption_on n);
        Object? visitOnOffOption_off(OnOffOption_off n);
        Object? visitAutoResponseStmt(AutoResponseStmt n);
        Object? visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier n);
        Object? visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName n);
        Object? visitUploadStmt_upload(UploadStmt_upload n);
        Object? visitUploadStmt_upload2(UploadStmt_upload2 n);
        Object? visitResetStmt_reset(ResetStmt_reset n);
        Object? visitResetStmt_reset2(ResetStmt_reset2 n);
        Object? visitResetStmt_reset_cold(ResetStmt_reset_cold n);
        Object? visitResetStmt_reset2_cold(ResetStmt_reset2_cold n);
        Object? visitInstallParameterList(InstallParameterList n);
        Object? visitInstallStmt_install(InstallStmt_install n);
        Object? visitInstallStmt_install_2(InstallStmt_install_2 n);
        Object? visitParameterItem(ParameterItem n);
        Object? visitParameterItemList(ParameterItemList n);
        Object? visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth n);
        Object? visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc n);
        Object? visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2 n);
        Object? visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2 n);
        Object? visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock n);
        Object? visitSelectStmt_select(SelectStmt_select n);
        Object? visitSelectStmt_select_2(SelectStmt_select_2 n);
        Object? visitDeleteStmt_delete(DeleteStmt_delete n);
        Object? visitDeleteStmt_delete_2(DeleteStmt_delete_2 n);
        Object? visitApdu2Stmt(Apdu2Stmt n);
        Object? visitPromptStmt(PromptStmt n);
        Object? visitShowapduStmt(ShowapduStmt n);
        Object? visitDes_3des_mac_call(Des_3des_mac_call n);
        Object? visitDes_3des_mac_Stmt(Des_3des_mac_Stmt n);
        Object? visitFull_3des_mac_call(Full_3des_mac_call n);
        Object? visitFull_3des_mac_Stmt(Full_3des_mac_Stmt n);
        Object? visitMac_auto_mac_option(Mac_auto_mac_option n);
        Object? visitMac_auto_mac_option2(Mac_auto_mac_option2 n);
        Object? visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt n);
        Object? visitLineEndOpt(LineEndOpt n);
        Object? visitSuperlongStmtInOneLine(SuperlongStmtInOneLine n);
        Object? visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines n);
        Object? visitCompareStmt(CompareStmt n);
        Object? visitSocket_messageStmt(Socket_messageStmt n);
        Object? visitGenerateStmt(GenerateStmt n);
        Object? visitSendtextStmt(SendtextStmt n);
        Object? visitPushStmt(PushStmt n);
        Object? visitGotoStmt(GotoStmt n);
        Object? visitEmptyStatement0(EmptyStatement0 n);
        Object? visitEmptyStatement1(EmptyStatement1 n);

       Object? visit(ASTNode n);
    }
abstract class ResultArgumentVisitor
    {
       Object? visitASTNodeToken(ASTNodeToken n, Object? o);
       Object? visitSnooperProg(SnooperProg n, Object? o);
       Object? visitSnooperSegmentItemList(SnooperSegmentItemList n, Object? o);
       Object? visitReturnStmt(ReturnStmt n, Object? o);
       Object? visitSimpleName(SimpleName n, Object? o);
       Object? visitSimpleNameList(SimpleNameList n, Object? o);
       Object? visitCallSignature(CallSignature n, Object? o);
       Object? visitFunctionDecl(FunctionDecl n, Object? o);
       Object? visitStatementList_StatementList(StatementList_StatementList n, Object? o);
       Object? visitStatementList(StatementList n, Object? o);
       Object? visitIfSeg(IfSeg n, Object? o);
       Object? visitIfThenStatement(IfThenStatement n, Object? o);
       Object? visitElseSeg(ElseSeg n, Object? o);
       Object? visitIfThenElseStatement(IfThenElseStatement n, Object? o);
       Object? visitElseIfStatementItemList(ElseIfStatementItemList n, Object? o);
       Object? visitElseIfStatementItem(ElseIfStatementItem n, Object? o);
       Object? visitVariable(Variable n, Object? o);
       Object? visitBadVariable(BadVariable n, Object? o);
       Object? visitLetOpt(LetOpt n, Object? o);
       Object? visitVariableStmt(VariableStmt n, Object? o);
       Object? visitPrimaryAssignmentStmt(PrimaryAssignmentStmt n, Object? o);
       Object? visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide n, Object? o);
       Object? visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt n, Object? o);
       Object? visitKeywordAssignmentStmt(KeywordAssignmentStmt n, Object? o);
       Object? visitBadAssignment(BadAssignment n, Object? o);
       Object? visitDoLoopStmt(DoLoopStmt n, Object? o);
       Object? visitStepStmOpt(StepStmOpt n, Object? o);
       Object? visitForStmt(ForStmt n, Object? o);
       Object? visitNextSeg(NextSeg n, Object? o);
       Object? visitHforStmt(HforStmt n, Object? o);
       Object? visitHnexSeg(HnexSeg n, Object? o);
       Object? visitNumberLiteral(NumberLiteral n, Object? o);
       Object? visitStringLiteral(StringLiteral n, Object? o);
       Object? visitArrayAccess(ArrayAccess n, Object? o);
       Object? visitHexMacroPrimary(HexMacroPrimary n, Object? o);
       Object? visitApduDataWith3Lc(ApduDataWith3Lc n, Object? o);
       Object? visitApduDataWith2Lc(ApduDataWith2Lc n, Object? o);
       Object? visitApduDataWith4Lc(ApduDataWith4Lc n, Object? o);
       Object? visitApduDataWithoutLc(ApduDataWithoutLc n, Object? o);
       Object? visitApduDataList(ApduDataList n, Object? o);
       Object? visitPostIncrementExpression(PostIncrementExpression n, Object? o);
       Object? visitPostDecrementExpression(PostDecrementExpression n, Object? o);
       Object? visitPreIncrementExpression(PreIncrementExpression n, Object? o);
       Object? visitPreDecrementExpression(PreDecrementExpression n, Object? o);
       Object? visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor n, Object? o);
       Object? visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not n, Object? o);
       Object? visitMultiplicativeExp_Divide(MultiplicativeExp_Divide n, Object? o);
       Object? visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply n, Object? o);
       Object? visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder n, Object? o);
       Object? visitAdditiveExp_Plus(AdditiveExp_Plus n, Object? o);
       Object? visitAdditiveExp_Minus(AdditiveExp_Minus n, Object? o);
       Object? visitShiftExp_Left(ShiftExp_Left n, Object? o);
       Object? visitShiftExp_Right(ShiftExp_Right n, Object? o);
       Object? visitRelationalExp_Less(RelationalExp_Less n, Object? o);
       Object? visitRelationalExp_Greater(RelationalExp_Greater n, Object? o);
       Object? visitRelationalExp_LessEqual(RelationalExp_LessEqual n, Object? o);
       Object? visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual n, Object? o);
       Object? visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual n, Object? o);
       Object? visitEqualityExpr_NotEqual(EqualityExpr_NotEqual n, Object? o);
       Object? visitAndExpression(AndExpression n, Object? o);
       Object? visitExclusiveOrExpression(ExclusiveOrExpression n, Object? o);
       Object? visitInclusiveOrExpression(InclusiveOrExpression n, Object? o);
       Object? visitConditionalAndExpression(ConditionalAndExpression n, Object? o);
       Object? visitConditionalOrExpression(ConditionalOrExpression n, Object? o);
       Object? visitExpressionStmt(ExpressionStmt n, Object? o);
       Object? visitVariableAndSW(VariableAndSW n, Object? o);
       Object? visitExpressionList(ExpressionList n, Object? o);
       Object? visitCallOpt(CallOpt n, Object? o);
       Object? visitFunctionCall(FunctionCall n, Object? o);
       Object? visitExitForStatement(ExitForStatement n, Object? o);
       Object? visitExitHforStatement(ExitHforStatement n, Object? o);
       Object? visitLoadOption_load_script(LoadOption_load_script n, Object? o);
       Object? visitLoadOption_loadprofile(LoadOption_loadprofile n, Object? o);
       Object? visitLoadOption_run_script(LoadOption_run_script n, Object? o);
       Object? visitLoadScriptStmt(LoadScriptStmt n, Object? o);
       Object? visitSimpleOption_timer_begin(SimpleOption_timer_begin n, Object? o);
       Object? visitSimpleOption_timer_end(SimpleOption_timer_end n, Object? o);
       Object? visitSimpleOption_pause(SimpleOption_pause n, Object? o);
       Object? visitSimpleOption_file(SimpleOption_file n, Object? o);
       Object? visitSimpleOption_line(SimpleOption_line n, Object? o);
       Object? visitSimpleOption_clear_fifo(SimpleOption_clear_fifo n, Object? o);
       Object? visitSimpleOption_beep(SimpleOption_beep n, Object? o);
       Object? visitSimpleOption_eject(SimpleOption_eject n, Object? o);
       Object? visitSimpleOption_insert(SimpleOption_insert n, Object? o);
       Object? visitSimpleOption_split(SimpleOption_split n, Object? o);
       Object? visitSimpleOption_end(SimpleOption_end n, Object? o);
       Object? visitSimpleOption_clear(SimpleOption_clear n, Object? o);
       Object? visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt n, Object? o);
       Object? visitSleepStmt(SleepStmt n, Object? o);
       Object? visitSetStmt_Identifier(SetStmt_Identifier n, Object? o);
       Object? visitSetStmt_MacroName(SetStmt_MacroName n, Object? o);
       Object? visitPrintStmt_Message(PrintStmt_Message n, Object? o);
       Object? visitPrintStmt_Quqstion(PrintStmt_Quqstion n, Object? o);
       Object? visitOnOffOption_on(OnOffOption_on n, Object? o);
       Object? visitOnOffOption_off(OnOffOption_off n, Object? o);
       Object? visitAutoResponseStmt(AutoResponseStmt n, Object? o);
       Object? visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier n, Object? o);
       Object? visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName n, Object? o);
       Object? visitUploadStmt_upload(UploadStmt_upload n, Object? o);
       Object? visitUploadStmt_upload2(UploadStmt_upload2 n, Object? o);
       Object? visitResetStmt_reset(ResetStmt_reset n, Object? o);
       Object? visitResetStmt_reset2(ResetStmt_reset2 n, Object? o);
       Object? visitResetStmt_reset_cold(ResetStmt_reset_cold n, Object? o);
       Object? visitResetStmt_reset2_cold(ResetStmt_reset2_cold n, Object? o);
       Object? visitInstallParameterList(InstallParameterList n, Object? o);
       Object? visitInstallStmt_install(InstallStmt_install n, Object? o);
       Object? visitInstallStmt_install_2(InstallStmt_install_2 n, Object? o);
       Object? visitParameterItem(ParameterItem n, Object? o);
       Object? visitParameterItemList(ParameterItemList n, Object? o);
       Object? visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth n, Object? o);
       Object? visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc n, Object? o);
       Object? visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2 n, Object? o);
       Object? visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2 n, Object? o);
       Object? visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock n, Object? o);
       Object? visitSelectStmt_select(SelectStmt_select n, Object? o);
       Object? visitSelectStmt_select_2(SelectStmt_select_2 n, Object? o);
       Object? visitDeleteStmt_delete(DeleteStmt_delete n, Object? o);
       Object? visitDeleteStmt_delete_2(DeleteStmt_delete_2 n, Object? o);
       Object? visitApdu2Stmt(Apdu2Stmt n, Object? o);
       Object? visitPromptStmt(PromptStmt n, Object? o);
       Object? visitShowapduStmt(ShowapduStmt n, Object? o);
       Object? visitDes_3des_mac_call(Des_3des_mac_call n, Object? o);
       Object? visitDes_3des_mac_Stmt(Des_3des_mac_Stmt n, Object? o);
       Object? visitFull_3des_mac_call(Full_3des_mac_call n, Object? o);
       Object? visitFull_3des_mac_Stmt(Full_3des_mac_Stmt n, Object? o);
       Object? visitMac_auto_mac_option(Mac_auto_mac_option n, Object? o);
       Object? visitMac_auto_mac_option2(Mac_auto_mac_option2 n, Object? o);
       Object? visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt n, Object? o);
       Object? visitLineEndOpt(LineEndOpt n, Object? o);
       Object? visitSuperlongStmtInOneLine(SuperlongStmtInOneLine n, Object? o);
       Object? visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines n, Object? o);
       Object? visitCompareStmt(CompareStmt n, Object? o);
       Object? visitSocket_messageStmt(Socket_messageStmt n, Object? o);
       Object? visitGenerateStmt(GenerateStmt n, Object? o);
       Object? visitSendtextStmt(SendtextStmt n, Object? o);
       Object? visitPushStmt(PushStmt n, Object? o);
       Object? visitGotoStmt(GotoStmt n, Object? o);
       Object? visitEmptyStatement0(EmptyStatement0 n, Object? o);
       Object? visitEmptyStatement1(EmptyStatement1 n, Object? o);

       Object? visit(ASTNode n, Object? o);
    }
abstract class AbstractVisitor implements Visitor, ArgumentVisitor
    {
          void unimplementedVisitor(String s);

          void visitASTNodeToken(ASTNodeToken n, [Object? o]) { unimplementedVisitor("visitASTNodeToken(ASTNodeToken, Object)"); }

          void visitSnooperProg(SnooperProg n, [Object? o]) { unimplementedVisitor("visitSnooperProg(SnooperProg, Object)"); }

          void visitSnooperSegmentItemList(SnooperSegmentItemList n, [Object? o]) { unimplementedVisitor("visitSnooperSegmentItemList(SnooperSegmentItemList, Object)"); }

          void visitReturnStmt(ReturnStmt n, [Object? o]) { unimplementedVisitor("visitReturnStmt(ReturnStmt, Object)"); }

          void visitSimpleName(SimpleName n, [Object? o]) { unimplementedVisitor("visitSimpleName(SimpleName, Object)"); }

          void visitSimpleNameList(SimpleNameList n, [Object? o]) { unimplementedVisitor("visitSimpleNameList(SimpleNameList, Object)"); }

          void visitCallSignature(CallSignature n, [Object? o]) { unimplementedVisitor("visitCallSignature(CallSignature, Object)"); }

          void visitFunctionDecl(FunctionDecl n, [Object? o]) { unimplementedVisitor("visitFunctionDecl(FunctionDecl, Object)"); }

          void visitStatementList_StatementList(StatementList_StatementList n, [Object? o]) { unimplementedVisitor("visitStatementList_StatementList(StatementList_StatementList, Object)"); }

          void visitStatementList(StatementList n, [Object? o]) { unimplementedVisitor("visitStatementList(StatementList, Object)"); }

          void visitIfSeg(IfSeg n, [Object? o]) { unimplementedVisitor("visitIfSeg(IfSeg, Object)"); }

          void visitIfThenStatement(IfThenStatement n, [Object? o]) { unimplementedVisitor("visitIfThenStatement(IfThenStatement, Object)"); }

          void visitElseSeg(ElseSeg n, [Object? o]) { unimplementedVisitor("visitElseSeg(ElseSeg, Object)"); }

          void visitIfThenElseStatement(IfThenElseStatement n, [Object? o]) { unimplementedVisitor("visitIfThenElseStatement(IfThenElseStatement, Object)"); }

          void visitElseIfStatementItemList(ElseIfStatementItemList n, [Object? o]) { unimplementedVisitor("visitElseIfStatementItemList(ElseIfStatementItemList, Object)"); }

          void visitElseIfStatementItem(ElseIfStatementItem n, [Object? o]) { unimplementedVisitor("visitElseIfStatementItem(ElseIfStatementItem, Object)"); }

          void visitVariable(Variable n, [Object? o]) { unimplementedVisitor("visitVariable(Variable, Object)"); }

          void visitBadVariable(BadVariable n, [Object? o]) { unimplementedVisitor("visitBadVariable(BadVariable, Object)"); }

          void visitLetOpt(LetOpt n, [Object? o]) { unimplementedVisitor("visitLetOpt(LetOpt, Object)"); }

          void visitVariableStmt(VariableStmt n, [Object? o]) { unimplementedVisitor("visitVariableStmt(VariableStmt, Object)"); }

          void visitPrimaryAssignmentStmt(PrimaryAssignmentStmt n, [Object? o]) { unimplementedVisitor("visitPrimaryAssignmentStmt(PrimaryAssignmentStmt, Object)"); }

          void visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide n, [Object? o]) { unimplementedVisitor("visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide, Object)"); }

          void visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt n, [Object? o]) { unimplementedVisitor("visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt, Object)"); }

          void visitKeywordAssignmentStmt(KeywordAssignmentStmt n, [Object? o]) { unimplementedVisitor("visitKeywordAssignmentStmt(KeywordAssignmentStmt, Object)"); }

          void visitBadAssignment(BadAssignment n, [Object? o]) { unimplementedVisitor("visitBadAssignment(BadAssignment, Object)"); }

          void visitDoLoopStmt(DoLoopStmt n, [Object? o]) { unimplementedVisitor("visitDoLoopStmt(DoLoopStmt, Object)"); }

          void visitStepStmOpt(StepStmOpt n, [Object? o]) { unimplementedVisitor("visitStepStmOpt(StepStmOpt, Object)"); }

          void visitForStmt(ForStmt n, [Object? o]) { unimplementedVisitor("visitForStmt(ForStmt, Object)"); }

          void visitNextSeg(NextSeg n, [Object? o]) { unimplementedVisitor("visitNextSeg(NextSeg, Object)"); }

          void visitHforStmt(HforStmt n, [Object? o]) { unimplementedVisitor("visitHforStmt(HforStmt, Object)"); }

          void visitHnexSeg(HnexSeg n, [Object? o]) { unimplementedVisitor("visitHnexSeg(HnexSeg, Object)"); }

          void visitNumberLiteral(NumberLiteral n, [Object? o]) { unimplementedVisitor("visitNumberLiteral(NumberLiteral, Object)"); }

          void visitStringLiteral(StringLiteral n, [Object? o]) { unimplementedVisitor("visitStringLiteral(StringLiteral, Object)"); }

          void visitArrayAccess(ArrayAccess n, [Object? o]) { unimplementedVisitor("visitArrayAccess(ArrayAccess, Object)"); }

          void visitHexMacroPrimary(HexMacroPrimary n, [Object? o]) { unimplementedVisitor("visitHexMacroPrimary(HexMacroPrimary, Object)"); }

          void visitApduDataWith3Lc(ApduDataWith3Lc n, [Object? o]) { unimplementedVisitor("visitApduDataWith3Lc(ApduDataWith3Lc, Object)"); }

          void visitApduDataWith2Lc(ApduDataWith2Lc n, [Object? o]) { unimplementedVisitor("visitApduDataWith2Lc(ApduDataWith2Lc, Object)"); }

          void visitApduDataWith4Lc(ApduDataWith4Lc n, [Object? o]) { unimplementedVisitor("visitApduDataWith4Lc(ApduDataWith4Lc, Object)"); }

          void visitApduDataWithoutLc(ApduDataWithoutLc n, [Object? o]) { unimplementedVisitor("visitApduDataWithoutLc(ApduDataWithoutLc, Object)"); }

          void visitApduDataList(ApduDataList n, [Object? o]) { unimplementedVisitor("visitApduDataList(ApduDataList, Object)"); }

          void visitPostIncrementExpression(PostIncrementExpression n, [Object? o]) { unimplementedVisitor("visitPostIncrementExpression(PostIncrementExpression, Object)"); }

          void visitPostDecrementExpression(PostDecrementExpression n, [Object? o]) { unimplementedVisitor("visitPostDecrementExpression(PostDecrementExpression, Object)"); }

          void visitPreIncrementExpression(PreIncrementExpression n, [Object? o]) { unimplementedVisitor("visitPreIncrementExpression(PreIncrementExpression, Object)"); }

          void visitPreDecrementExpression(PreDecrementExpression n, [Object? o]) { unimplementedVisitor("visitPreDecrementExpression(PreDecrementExpression, Object)"); }

          void visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor n, [Object? o]) { unimplementedVisitor("visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor, Object)"); }

          void visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not n, [Object? o]) { unimplementedVisitor("visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not, Object)"); }

          void visitMultiplicativeExp_Divide(MultiplicativeExp_Divide n, [Object? o]) { unimplementedVisitor("visitMultiplicativeExp_Divide(MultiplicativeExp_Divide, Object)"); }

          void visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply n, [Object? o]) { unimplementedVisitor("visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply, Object)"); }

          void visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder n, [Object? o]) { unimplementedVisitor("visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder, Object)"); }

          void visitAdditiveExp_Plus(AdditiveExp_Plus n, [Object? o]) { unimplementedVisitor("visitAdditiveExp_Plus(AdditiveExp_Plus, Object)"); }

          void visitAdditiveExp_Minus(AdditiveExp_Minus n, [Object? o]) { unimplementedVisitor("visitAdditiveExp_Minus(AdditiveExp_Minus, Object)"); }

          void visitShiftExp_Left(ShiftExp_Left n, [Object? o]) { unimplementedVisitor("visitShiftExp_Left(ShiftExp_Left, Object)"); }

          void visitShiftExp_Right(ShiftExp_Right n, [Object? o]) { unimplementedVisitor("visitShiftExp_Right(ShiftExp_Right, Object)"); }

          void visitRelationalExp_Less(RelationalExp_Less n, [Object? o]) { unimplementedVisitor("visitRelationalExp_Less(RelationalExp_Less, Object)"); }

          void visitRelationalExp_Greater(RelationalExp_Greater n, [Object? o]) { unimplementedVisitor("visitRelationalExp_Greater(RelationalExp_Greater, Object)"); }

          void visitRelationalExp_LessEqual(RelationalExp_LessEqual n, [Object? o]) { unimplementedVisitor("visitRelationalExp_LessEqual(RelationalExp_LessEqual, Object)"); }

          void visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual n, [Object? o]) { unimplementedVisitor("visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual, Object)"); }

          void visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual n, [Object? o]) { unimplementedVisitor("visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual, Object)"); }

          void visitEqualityExpr_NotEqual(EqualityExpr_NotEqual n, [Object? o]) { unimplementedVisitor("visitEqualityExpr_NotEqual(EqualityExpr_NotEqual, Object)"); }

          void visitAndExpression(AndExpression n, [Object? o]) { unimplementedVisitor("visitAndExpression(AndExpression, Object)"); }

          void visitExclusiveOrExpression(ExclusiveOrExpression n, [Object? o]) { unimplementedVisitor("visitExclusiveOrExpression(ExclusiveOrExpression, Object)"); }

          void visitInclusiveOrExpression(InclusiveOrExpression n, [Object? o]) { unimplementedVisitor("visitInclusiveOrExpression(InclusiveOrExpression, Object)"); }

          void visitConditionalAndExpression(ConditionalAndExpression n, [Object? o]) { unimplementedVisitor("visitConditionalAndExpression(ConditionalAndExpression, Object)"); }

          void visitConditionalOrExpression(ConditionalOrExpression n, [Object? o]) { unimplementedVisitor("visitConditionalOrExpression(ConditionalOrExpression, Object)"); }

          void visitExpressionStmt(ExpressionStmt n, [Object? o]) { unimplementedVisitor("visitExpressionStmt(ExpressionStmt, Object)"); }

          void visitVariableAndSW(VariableAndSW n, [Object? o]) { unimplementedVisitor("visitVariableAndSW(VariableAndSW, Object)"); }

          void visitExpressionList(ExpressionList n, [Object? o]) { unimplementedVisitor("visitExpressionList(ExpressionList, Object)"); }

          void visitCallOpt(CallOpt n, [Object? o]) { unimplementedVisitor("visitCallOpt(CallOpt, Object)"); }

          void visitFunctionCall(FunctionCall n, [Object? o]) { unimplementedVisitor("visitFunctionCall(FunctionCall, Object)"); }

          void visitExitForStatement(ExitForStatement n, [Object? o]) { unimplementedVisitor("visitExitForStatement(ExitForStatement, Object)"); }

          void visitExitHforStatement(ExitHforStatement n, [Object? o]) { unimplementedVisitor("visitExitHforStatement(ExitHforStatement, Object)"); }

          void visitLoadOption_load_script(LoadOption_load_script n, [Object? o]) { unimplementedVisitor("visitLoadOption_load_script(LoadOption_load_script, Object)"); }

          void visitLoadOption_loadprofile(LoadOption_loadprofile n, [Object? o]) { unimplementedVisitor("visitLoadOption_loadprofile(LoadOption_loadprofile, Object)"); }

          void visitLoadOption_run_script(LoadOption_run_script n, [Object? o]) { unimplementedVisitor("visitLoadOption_run_script(LoadOption_run_script, Object)"); }

          void visitLoadScriptStmt(LoadScriptStmt n, [Object? o]) { unimplementedVisitor("visitLoadScriptStmt(LoadScriptStmt, Object)"); }

          void visitSimpleOption_timer_begin(SimpleOption_timer_begin n, [Object? o]) { unimplementedVisitor("visitSimpleOption_timer_begin(SimpleOption_timer_begin, Object)"); }

          void visitSimpleOption_timer_end(SimpleOption_timer_end n, [Object? o]) { unimplementedVisitor("visitSimpleOption_timer_end(SimpleOption_timer_end, Object)"); }

          void visitSimpleOption_pause(SimpleOption_pause n, [Object? o]) { unimplementedVisitor("visitSimpleOption_pause(SimpleOption_pause, Object)"); }

          void visitSimpleOption_file(SimpleOption_file n, [Object? o]) { unimplementedVisitor("visitSimpleOption_file(SimpleOption_file, Object)"); }

          void visitSimpleOption_line(SimpleOption_line n, [Object? o]) { unimplementedVisitor("visitSimpleOption_line(SimpleOption_line, Object)"); }

          void visitSimpleOption_clear_fifo(SimpleOption_clear_fifo n, [Object? o]) { unimplementedVisitor("visitSimpleOption_clear_fifo(SimpleOption_clear_fifo, Object)"); }

          void visitSimpleOption_beep(SimpleOption_beep n, [Object? o]) { unimplementedVisitor("visitSimpleOption_beep(SimpleOption_beep, Object)"); }

          void visitSimpleOption_eject(SimpleOption_eject n, [Object? o]) { unimplementedVisitor("visitSimpleOption_eject(SimpleOption_eject, Object)"); }

          void visitSimpleOption_insert(SimpleOption_insert n, [Object? o]) { unimplementedVisitor("visitSimpleOption_insert(SimpleOption_insert, Object)"); }

          void visitSimpleOption_split(SimpleOption_split n, [Object? o]) { unimplementedVisitor("visitSimpleOption_split(SimpleOption_split, Object)"); }

          void visitSimpleOption_end(SimpleOption_end n, [Object? o]) { unimplementedVisitor("visitSimpleOption_end(SimpleOption_end, Object)"); }

          void visitSimpleOption_clear(SimpleOption_clear n, [Object? o]) { unimplementedVisitor("visitSimpleOption_clear(SimpleOption_clear, Object)"); }

          void visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt n, [Object? o]) { unimplementedVisitor("visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt, Object)"); }

          void visitSleepStmt(SleepStmt n, [Object? o]) { unimplementedVisitor("visitSleepStmt(SleepStmt, Object)"); }

          void visitSetStmt_Identifier(SetStmt_Identifier n, [Object? o]) { unimplementedVisitor("visitSetStmt_Identifier(SetStmt_Identifier, Object)"); }

          void visitSetStmt_MacroName(SetStmt_MacroName n, [Object? o]) { unimplementedVisitor("visitSetStmt_MacroName(SetStmt_MacroName, Object)"); }

          void visitPrintStmt_Message(PrintStmt_Message n, [Object? o]) { unimplementedVisitor("visitPrintStmt_Message(PrintStmt_Message, Object)"); }

          void visitPrintStmt_Quqstion(PrintStmt_Quqstion n, [Object? o]) { unimplementedVisitor("visitPrintStmt_Quqstion(PrintStmt_Quqstion, Object)"); }

          void visitOnOffOption_on(OnOffOption_on n, [Object? o]) { unimplementedVisitor("visitOnOffOption_on(OnOffOption_on, Object)"); }

          void visitOnOffOption_off(OnOffOption_off n, [Object? o]) { unimplementedVisitor("visitOnOffOption_off(OnOffOption_off, Object)"); }

          void visitAutoResponseStmt(AutoResponseStmt n, [Object? o]) { unimplementedVisitor("visitAutoResponseStmt(AutoResponseStmt, Object)"); }

          void visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier n, [Object? o]) { unimplementedVisitor("visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier, Object)"); }

          void visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName n, [Object? o]) { unimplementedVisitor("visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName, Object)"); }

          void visitUploadStmt_upload(UploadStmt_upload n, [Object? o]) { unimplementedVisitor("visitUploadStmt_upload(UploadStmt_upload, Object)"); }

          void visitUploadStmt_upload2(UploadStmt_upload2 n, [Object? o]) { unimplementedVisitor("visitUploadStmt_upload2(UploadStmt_upload2, Object)"); }

          void visitResetStmt_reset(ResetStmt_reset n, [Object? o]) { unimplementedVisitor("visitResetStmt_reset(ResetStmt_reset, Object)"); }

          void visitResetStmt_reset2(ResetStmt_reset2 n, [Object? o]) { unimplementedVisitor("visitResetStmt_reset2(ResetStmt_reset2, Object)"); }

          void visitResetStmt_reset_cold(ResetStmt_reset_cold n, [Object? o]) { unimplementedVisitor("visitResetStmt_reset_cold(ResetStmt_reset_cold, Object)"); }

          void visitResetStmt_reset2_cold(ResetStmt_reset2_cold n, [Object? o]) { unimplementedVisitor("visitResetStmt_reset2_cold(ResetStmt_reset2_cold, Object)"); }

          void visitInstallParameterList(InstallParameterList n, [Object? o]) { unimplementedVisitor("visitInstallParameterList(InstallParameterList, Object)"); }

          void visitInstallStmt_install(InstallStmt_install n, [Object? o]) { unimplementedVisitor("visitInstallStmt_install(InstallStmt_install, Object)"); }

          void visitInstallStmt_install_2(InstallStmt_install_2 n, [Object? o]) { unimplementedVisitor("visitInstallStmt_install_2(InstallStmt_install_2, Object)"); }

          void visitParameterItem(ParameterItem n, [Object? o]) { unimplementedVisitor("visitParameterItem(ParameterItem, Object)"); }

          void visitParameterItemList(ParameterItemList n, [Object? o]) { unimplementedVisitor("visitParameterItemList(ParameterItemList, Object)"); }

          void visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth n, [Object? o]) { unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth, Object)"); }

          void visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc n, [Object? o]) { unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc, Object)"); }

          void visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2 n, [Object? o]) { unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2, Object)"); }

          void visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2 n, [Object? o]) { unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2, Object)"); }

          void visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock n, [Object? o]) { unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock, Object)"); }

          void visitSelectStmt_select(SelectStmt_select n, [Object? o]) { unimplementedVisitor("visitSelectStmt_select(SelectStmt_select, Object)"); }

          void visitSelectStmt_select_2(SelectStmt_select_2 n, [Object? o]) { unimplementedVisitor("visitSelectStmt_select_2(SelectStmt_select_2, Object)"); }

          void visitDeleteStmt_delete(DeleteStmt_delete n, [Object? o]) { unimplementedVisitor("visitDeleteStmt_delete(DeleteStmt_delete, Object)"); }

          void visitDeleteStmt_delete_2(DeleteStmt_delete_2 n, [Object? o]) { unimplementedVisitor("visitDeleteStmt_delete_2(DeleteStmt_delete_2, Object)"); }

          void visitApdu2Stmt(Apdu2Stmt n, [Object? o]) { unimplementedVisitor("visitApdu2Stmt(Apdu2Stmt, Object)"); }

          void visitPromptStmt(PromptStmt n, [Object? o]) { unimplementedVisitor("visitPromptStmt(PromptStmt, Object)"); }

          void visitShowapduStmt(ShowapduStmt n, [Object? o]) { unimplementedVisitor("visitShowapduStmt(ShowapduStmt, Object)"); }

          void visitDes_3des_mac_call(Des_3des_mac_call n, [Object? o]) { unimplementedVisitor("visitDes_3des_mac_call(Des_3des_mac_call, Object)"); }

          void visitDes_3des_mac_Stmt(Des_3des_mac_Stmt n, [Object? o]) { unimplementedVisitor("visitDes_3des_mac_Stmt(Des_3des_mac_Stmt, Object)"); }

          void visitFull_3des_mac_call(Full_3des_mac_call n, [Object? o]) { unimplementedVisitor("visitFull_3des_mac_call(Full_3des_mac_call, Object)"); }

          void visitFull_3des_mac_Stmt(Full_3des_mac_Stmt n, [Object? o]) { unimplementedVisitor("visitFull_3des_mac_Stmt(Full_3des_mac_Stmt, Object)"); }

          void visitMac_auto_mac_option(Mac_auto_mac_option n, [Object? o]) { unimplementedVisitor("visitMac_auto_mac_option(Mac_auto_mac_option, Object)"); }

          void visitMac_auto_mac_option2(Mac_auto_mac_option2 n, [Object? o]) { unimplementedVisitor("visitMac_auto_mac_option2(Mac_auto_mac_option2, Object)"); }

          void visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt n, [Object? o]) { unimplementedVisitor("visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt, Object)"); }

          void visitLineEndOpt(LineEndOpt n, [Object? o]) { unimplementedVisitor("visitLineEndOpt(LineEndOpt, Object)"); }

          void visitSuperlongStmtInOneLine(SuperlongStmtInOneLine n, [Object? o]) { unimplementedVisitor("visitSuperlongStmtInOneLine(SuperlongStmtInOneLine, Object)"); }

          void visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines n, [Object? o]) { unimplementedVisitor("visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines, Object)"); }

          void visitCompareStmt(CompareStmt n, [Object? o]) { unimplementedVisitor("visitCompareStmt(CompareStmt, Object)"); }

          void visitSocket_messageStmt(Socket_messageStmt n, [Object? o]) { unimplementedVisitor("visitSocket_messageStmt(Socket_messageStmt, Object)"); }

          void visitGenerateStmt(GenerateStmt n, [Object? o]) { unimplementedVisitor("visitGenerateStmt(GenerateStmt, Object)"); }

          void visitSendtextStmt(SendtextStmt n, [Object? o]) { unimplementedVisitor("visitSendtextStmt(SendtextStmt, Object)"); }

          void visitPushStmt(PushStmt n, [Object? o]) { unimplementedVisitor("visitPushStmt(PushStmt, Object)"); }

          void visitGotoStmt(GotoStmt n, [Object? o]) { unimplementedVisitor("visitGotoStmt(GotoStmt, Object)"); }

          void visitEmptyStatement0(EmptyStatement0 n, [Object? o]) { unimplementedVisitor("visitEmptyStatement0(EmptyStatement0, Object)"); }

          void visitEmptyStatement1(EmptyStatement1 n, [Object? o]) { unimplementedVisitor("visitEmptyStatement1(EmptyStatement1, Object)"); }


          void visit(ASTNode n, [Object? o])
        {
            if (n is ASTNodeToken) visitASTNodeToken(n, o);
            else if (n is SnooperProg) visitSnooperProg(n, o);
            else if (n is SnooperSegmentItemList) visitSnooperSegmentItemList(n, o);
            else if (n is ReturnStmt) visitReturnStmt(n, o);
            else if (n is SimpleName) visitSimpleName(n, o);
            else if (n is SimpleNameList) visitSimpleNameList(n, o);
            else if (n is CallSignature) visitCallSignature(n, o);
            else if (n is FunctionDecl) visitFunctionDecl(n, o);
            else if (n is StatementList_StatementList) visitStatementList_StatementList(n, o);
            else if (n is StatementList) visitStatementList(n, o);
            else if (n is IfSeg) visitIfSeg(n, o);
            else if (n is IfThenStatement) visitIfThenStatement(n, o);
            else if (n is ElseSeg) visitElseSeg(n, o);
            else if (n is IfThenElseStatement) visitIfThenElseStatement(n, o);
            else if (n is ElseIfStatementItemList) visitElseIfStatementItemList(n, o);
            else if (n is ElseIfStatementItem) visitElseIfStatementItem(n, o);
            else if (n is Variable) visitVariable(n, o);
            else if (n is BadVariable) visitBadVariable(n, o);
            else if (n is LetOpt) visitLetOpt(n, o);
            else if (n is VariableStmt) visitVariableStmt(n, o);
            else if (n is PrimaryAssignmentStmt) visitPrimaryAssignmentStmt(n, o);
            else if (n is ArrayAccesOnLeftSide) visitArrayAccesOnLeftSide(n, o);
            else if (n is ArrayAccessAssignmentStmt) visitArrayAccessAssignmentStmt(n, o);
            else if (n is KeywordAssignmentStmt) visitKeywordAssignmentStmt(n, o);
            else if (n is BadAssignment) visitBadAssignment(n, o);
            else if (n is DoLoopStmt) visitDoLoopStmt(n, o);
            else if (n is StepStmOpt) visitStepStmOpt(n, o);
            else if (n is ForStmt) visitForStmt(n, o);
            else if (n is NextSeg) visitNextSeg(n, o);
            else if (n is HforStmt) visitHforStmt(n, o);
            else if (n is HnexSeg) visitHnexSeg(n, o);
            else if (n is NumberLiteral) visitNumberLiteral(n, o);
            else if (n is StringLiteral) visitStringLiteral(n, o);
            else if (n is ArrayAccess) visitArrayAccess(n, o);
            else if (n is HexMacroPrimary) visitHexMacroPrimary(n, o);
            else if (n is ApduDataWith3Lc) visitApduDataWith3Lc(n, o);
            else if (n is ApduDataWith2Lc) visitApduDataWith2Lc(n, o);
            else if (n is ApduDataWith4Lc) visitApduDataWith4Lc(n, o);
            else if (n is ApduDataWithoutLc) visitApduDataWithoutLc(n, o);
            else if (n is ApduDataList) visitApduDataList(n, o);
            else if (n is PostIncrementExpression) visitPostIncrementExpression(n, o);
            else if (n is PostDecrementExpression) visitPostDecrementExpression(n, o);
            else if (n is PreIncrementExpression) visitPreIncrementExpression(n, o);
            else if (n is PreDecrementExpression) visitPreDecrementExpression(n, o);
            else if (n is UnaryExpNotPlusMinus_Xor) visitUnaryExpNotPlusMinus_Xor(n, o);
            else if (n is UnaryExpNotPlusMinus_Not) visitUnaryExpNotPlusMinus_Not(n, o);
            else if (n is MultiplicativeExp_Divide) visitMultiplicativeExp_Divide(n, o);
            else if (n is MultiplicativeExp_Multiply) visitMultiplicativeExp_Multiply(n, o);
            else if (n is MultiplicativeExp_Remainder) visitMultiplicativeExp_Remainder(n, o);
            else if (n is AdditiveExp_Plus) visitAdditiveExp_Plus(n, o);
            else if (n is AdditiveExp_Minus) visitAdditiveExp_Minus(n, o);
            else if (n is ShiftExp_Left) visitShiftExp_Left(n, o);
            else if (n is ShiftExp_Right) visitShiftExp_Right(n, o);
            else if (n is RelationalExp_Less) visitRelationalExp_Less(n, o);
            else if (n is RelationalExp_Greater) visitRelationalExp_Greater(n, o);
            else if (n is RelationalExp_LessEqual) visitRelationalExp_LessEqual(n, o);
            else if (n is RelationalExp_GreaterEqual) visitRelationalExp_GreaterEqual(n, o);
            else if (n is EqualityExpr_EqualEqual) visitEqualityExpr_EqualEqual(n, o);
            else if (n is EqualityExpr_NotEqual) visitEqualityExpr_NotEqual(n, o);
            else if (n is AndExpression) visitAndExpression(n, o);
            else if (n is ExclusiveOrExpression) visitExclusiveOrExpression(n, o);
            else if (n is InclusiveOrExpression) visitInclusiveOrExpression(n, o);
            else if (n is ConditionalAndExpression) visitConditionalAndExpression(n, o);
            else if (n is ConditionalOrExpression) visitConditionalOrExpression(n, o);
            else if (n is ExpressionStmt) visitExpressionStmt(n, o);
            else if (n is VariableAndSW) visitVariableAndSW(n, o);
            else if (n is ExpressionList) visitExpressionList(n, o);
            else if (n is CallOpt) visitCallOpt(n, o);
            else if (n is FunctionCall) visitFunctionCall(n, o);
            else if (n is ExitForStatement) visitExitForStatement(n, o);
            else if (n is ExitHforStatement) visitExitHforStatement(n, o);
            else if (n is LoadOption_load_script) visitLoadOption_load_script(n, o);
            else if (n is LoadOption_loadprofile) visitLoadOption_loadprofile(n, o);
            else if (n is LoadOption_run_script) visitLoadOption_run_script(n, o);
            else if (n is LoadScriptStmt) visitLoadScriptStmt(n, o);
            else if (n is SimpleOption_timer_begin) visitSimpleOption_timer_begin(n, o);
            else if (n is SimpleOption_timer_end) visitSimpleOption_timer_end(n, o);
            else if (n is SimpleOption_pause) visitSimpleOption_pause(n, o);
            else if (n is SimpleOption_file) visitSimpleOption_file(n, o);
            else if (n is SimpleOption_line) visitSimpleOption_line(n, o);
            else if (n is SimpleOption_clear_fifo) visitSimpleOption_clear_fifo(n, o);
            else if (n is SimpleOption_beep) visitSimpleOption_beep(n, o);
            else if (n is SimpleOption_eject) visitSimpleOption_eject(n, o);
            else if (n is SimpleOption_insert) visitSimpleOption_insert(n, o);
            else if (n is SimpleOption_split) visitSimpleOption_split(n, o);
            else if (n is SimpleOption_end) visitSimpleOption_end(n, o);
            else if (n is SimpleOption_clear) visitSimpleOption_clear(n, o);
            else if (n is KeyWordWithoutParameterStmt) visitKeyWordWithoutParameterStmt(n, o);
            else if (n is SleepStmt) visitSleepStmt(n, o);
            else if (n is SetStmt_Identifier) visitSetStmt_Identifier(n, o);
            else if (n is SetStmt_MacroName) visitSetStmt_MacroName(n, o);
            else if (n is PrintStmt_Message) visitPrintStmt_Message(n, o);
            else if (n is PrintStmt_Quqstion) visitPrintStmt_Quqstion(n, o);
            else if (n is OnOffOption_on) visitOnOffOption_on(n, o);
            else if (n is OnOffOption_off) visitOnOffOption_off(n, o);
            else if (n is AutoResponseStmt) visitAutoResponseStmt(n, o);
            else if (n is WriteFifoStmt_Identifier) visitWriteFifoStmt_Identifier(n, o);
            else if (n is WriteFifoStmt_MacroName) visitWriteFifoStmt_MacroName(n, o);
            else if (n is UploadStmt_upload) visitUploadStmt_upload(n, o);
            else if (n is UploadStmt_upload2) visitUploadStmt_upload2(n, o);
            else if (n is ResetStmt_reset) visitResetStmt_reset(n, o);
            else if (n is ResetStmt_reset2) visitResetStmt_reset2(n, o);
            else if (n is ResetStmt_reset_cold) visitResetStmt_reset_cold(n, o);
            else if (n is ResetStmt_reset2_cold) visitResetStmt_reset2_cold(n, o);
            else if (n is InstallParameterList) visitInstallParameterList(n, o);
            else if (n is InstallStmt_install) visitInstallStmt_install(n, o);
            else if (n is InstallStmt_install_2) visitInstallStmt_install_2(n, o);
            else if (n is ParameterItem) visitParameterItem(n, o);
            else if (n is ParameterItemList) visitParameterItemList(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth) visitJcopAuthStmt_jcop22_ext_auth(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_kmc) visitJcopAuthStmt_jcop22_ext_auth_kmc(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_2) visitJcopAuthStmt_jcop22_ext_auth_2(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_kmc_2) visitJcopAuthStmt_jcop22_ext_auth_kmc_2(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_nonblock) visitJcopAuthStmt_jcop22_ext_auth_nonblock(n, o);
            else if (n is SelectStmt_select) visitSelectStmt_select(n, o);
            else if (n is SelectStmt_select_2) visitSelectStmt_select_2(n, o);
            else if (n is DeleteStmt_delete) visitDeleteStmt_delete(n, o);
            else if (n is DeleteStmt_delete_2) visitDeleteStmt_delete_2(n, o);
            else if (n is Apdu2Stmt) visitApdu2Stmt(n, o);
            else if (n is PromptStmt) visitPromptStmt(n, o);
            else if (n is ShowapduStmt) visitShowapduStmt(n, o);
            else if (n is Des_3des_mac_call) visitDes_3des_mac_call(n, o);
            else if (n is Des_3des_mac_Stmt) visitDes_3des_mac_Stmt(n, o);
            else if (n is Full_3des_mac_call) visitFull_3des_mac_call(n, o);
            else if (n is Full_3des_mac_Stmt) visitFull_3des_mac_Stmt(n, o);
            else if (n is Mac_auto_mac_option) visitMac_auto_mac_option(n, o);
            else if (n is Mac_auto_mac_option2) visitMac_auto_mac_option2(n, o);
            else if (n is Mac_auto_mac_Stmt) visitMac_auto_mac_Stmt(n, o);
            else if (n is LineEndOpt) visitLineEndOpt(n, o);
            else if (n is SuperlongStmtInOneLine) visitSuperlongStmtInOneLine(n, o);
            else if (n is SuperlongStmtInMutipleLines) visitSuperlongStmtInMutipleLines(n, o);
            else if (n is CompareStmt) visitCompareStmt(n, o);
            else if (n is Socket_messageStmt) visitSocket_messageStmt(n, o);
            else if (n is GenerateStmt) visitGenerateStmt(n, o);
            else if (n is SendtextStmt) visitSendtextStmt(n, o);
            else if (n is PushStmt) visitPushStmt(n, o);
            else if (n is GotoStmt) visitGotoStmt(n, o);
            else if (n is EmptyStatement0) visitEmptyStatement0(n, o);
            else if (n is EmptyStatement1) visitEmptyStatement1(n, o);
            else throw  ArgumentError("visit(" + n.toString() + ")");
        }
    }
abstract class AbstractResultVisitor implements ResultVisitor, ResultArgumentVisitor
    {
         Object? unimplementedVisitor(String s);

        Object? visitASTNodeToken(ASTNodeToken n, [Object? o]){ return  unimplementedVisitor("visitASTNodeToken(ASTNodeToken, Object)"); }

        Object? visitSnooperProg(SnooperProg n, [Object? o]){ return  unimplementedVisitor("visitSnooperProg(SnooperProg, Object)"); }

        Object? visitSnooperSegmentItemList(SnooperSegmentItemList n, [Object? o]){ return  unimplementedVisitor("visitSnooperSegmentItemList(SnooperSegmentItemList, Object)"); }

        Object? visitReturnStmt(ReturnStmt n, [Object? o]){ return  unimplementedVisitor("visitReturnStmt(ReturnStmt, Object)"); }

        Object? visitSimpleName(SimpleName n, [Object? o]){ return  unimplementedVisitor("visitSimpleName(SimpleName, Object)"); }

        Object? visitSimpleNameList(SimpleNameList n, [Object? o]){ return  unimplementedVisitor("visitSimpleNameList(SimpleNameList, Object)"); }

        Object? visitCallSignature(CallSignature n, [Object? o]){ return  unimplementedVisitor("visitCallSignature(CallSignature, Object)"); }

        Object? visitFunctionDecl(FunctionDecl n, [Object? o]){ return  unimplementedVisitor("visitFunctionDecl(FunctionDecl, Object)"); }

        Object? visitStatementList_StatementList(StatementList_StatementList n, [Object? o]){ return  unimplementedVisitor("visitStatementList_StatementList(StatementList_StatementList, Object)"); }

        Object? visitStatementList(StatementList n, [Object? o]){ return  unimplementedVisitor("visitStatementList(StatementList, Object)"); }

        Object? visitIfSeg(IfSeg n, [Object? o]){ return  unimplementedVisitor("visitIfSeg(IfSeg, Object)"); }

        Object? visitIfThenStatement(IfThenStatement n, [Object? o]){ return  unimplementedVisitor("visitIfThenStatement(IfThenStatement, Object)"); }

        Object? visitElseSeg(ElseSeg n, [Object? o]){ return  unimplementedVisitor("visitElseSeg(ElseSeg, Object)"); }

        Object? visitIfThenElseStatement(IfThenElseStatement n, [Object? o]){ return  unimplementedVisitor("visitIfThenElseStatement(IfThenElseStatement, Object)"); }

        Object? visitElseIfStatementItemList(ElseIfStatementItemList n, [Object? o]){ return  unimplementedVisitor("visitElseIfStatementItemList(ElseIfStatementItemList, Object)"); }

        Object? visitElseIfStatementItem(ElseIfStatementItem n, [Object? o]){ return  unimplementedVisitor("visitElseIfStatementItem(ElseIfStatementItem, Object)"); }

        Object? visitVariable(Variable n, [Object? o]){ return  unimplementedVisitor("visitVariable(Variable, Object)"); }

        Object? visitBadVariable(BadVariable n, [Object? o]){ return  unimplementedVisitor("visitBadVariable(BadVariable, Object)"); }

        Object? visitLetOpt(LetOpt n, [Object? o]){ return  unimplementedVisitor("visitLetOpt(LetOpt, Object)"); }

        Object? visitVariableStmt(VariableStmt n, [Object? o]){ return  unimplementedVisitor("visitVariableStmt(VariableStmt, Object)"); }

        Object? visitPrimaryAssignmentStmt(PrimaryAssignmentStmt n, [Object? o]){ return  unimplementedVisitor("visitPrimaryAssignmentStmt(PrimaryAssignmentStmt, Object)"); }

        Object? visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide n, [Object? o]){ return  unimplementedVisitor("visitArrayAccesOnLeftSide(ArrayAccesOnLeftSide, Object)"); }

        Object? visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt n, [Object? o]){ return  unimplementedVisitor("visitArrayAccessAssignmentStmt(ArrayAccessAssignmentStmt, Object)"); }

        Object? visitKeywordAssignmentStmt(KeywordAssignmentStmt n, [Object? o]){ return  unimplementedVisitor("visitKeywordAssignmentStmt(KeywordAssignmentStmt, Object)"); }

        Object? visitBadAssignment(BadAssignment n, [Object? o]){ return  unimplementedVisitor("visitBadAssignment(BadAssignment, Object)"); }

        Object? visitDoLoopStmt(DoLoopStmt n, [Object? o]){ return  unimplementedVisitor("visitDoLoopStmt(DoLoopStmt, Object)"); }

        Object? visitStepStmOpt(StepStmOpt n, [Object? o]){ return  unimplementedVisitor("visitStepStmOpt(StepStmOpt, Object)"); }

        Object? visitForStmt(ForStmt n, [Object? o]){ return  unimplementedVisitor("visitForStmt(ForStmt, Object)"); }

        Object? visitNextSeg(NextSeg n, [Object? o]){ return  unimplementedVisitor("visitNextSeg(NextSeg, Object)"); }

        Object? visitHforStmt(HforStmt n, [Object? o]){ return  unimplementedVisitor("visitHforStmt(HforStmt, Object)"); }

        Object? visitHnexSeg(HnexSeg n, [Object? o]){ return  unimplementedVisitor("visitHnexSeg(HnexSeg, Object)"); }

        Object? visitNumberLiteral(NumberLiteral n, [Object? o]){ return  unimplementedVisitor("visitNumberLiteral(NumberLiteral, Object)"); }

        Object? visitStringLiteral(StringLiteral n, [Object? o]){ return  unimplementedVisitor("visitStringLiteral(StringLiteral, Object)"); }

        Object? visitArrayAccess(ArrayAccess n, [Object? o]){ return  unimplementedVisitor("visitArrayAccess(ArrayAccess, Object)"); }

        Object? visitHexMacroPrimary(HexMacroPrimary n, [Object? o]){ return  unimplementedVisitor("visitHexMacroPrimary(HexMacroPrimary, Object)"); }

        Object? visitApduDataWith3Lc(ApduDataWith3Lc n, [Object? o]){ return  unimplementedVisitor("visitApduDataWith3Lc(ApduDataWith3Lc, Object)"); }

        Object? visitApduDataWith2Lc(ApduDataWith2Lc n, [Object? o]){ return  unimplementedVisitor("visitApduDataWith2Lc(ApduDataWith2Lc, Object)"); }

        Object? visitApduDataWith4Lc(ApduDataWith4Lc n, [Object? o]){ return  unimplementedVisitor("visitApduDataWith4Lc(ApduDataWith4Lc, Object)"); }

        Object? visitApduDataWithoutLc(ApduDataWithoutLc n, [Object? o]){ return  unimplementedVisitor("visitApduDataWithoutLc(ApduDataWithoutLc, Object)"); }

        Object? visitApduDataList(ApduDataList n, [Object? o]){ return  unimplementedVisitor("visitApduDataList(ApduDataList, Object)"); }

        Object? visitPostIncrementExpression(PostIncrementExpression n, [Object? o]){ return  unimplementedVisitor("visitPostIncrementExpression(PostIncrementExpression, Object)"); }

        Object? visitPostDecrementExpression(PostDecrementExpression n, [Object? o]){ return  unimplementedVisitor("visitPostDecrementExpression(PostDecrementExpression, Object)"); }

        Object? visitPreIncrementExpression(PreIncrementExpression n, [Object? o]){ return  unimplementedVisitor("visitPreIncrementExpression(PreIncrementExpression, Object)"); }

        Object? visitPreDecrementExpression(PreDecrementExpression n, [Object? o]){ return  unimplementedVisitor("visitPreDecrementExpression(PreDecrementExpression, Object)"); }

        Object? visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor n, [Object? o]){ return  unimplementedVisitor("visitUnaryExpNotPlusMinus_Xor(UnaryExpNotPlusMinus_Xor, Object)"); }

        Object? visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not n, [Object? o]){ return  unimplementedVisitor("visitUnaryExpNotPlusMinus_Not(UnaryExpNotPlusMinus_Not, Object)"); }

        Object? visitMultiplicativeExp_Divide(MultiplicativeExp_Divide n, [Object? o]){ return  unimplementedVisitor("visitMultiplicativeExp_Divide(MultiplicativeExp_Divide, Object)"); }

        Object? visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply n, [Object? o]){ return  unimplementedVisitor("visitMultiplicativeExp_Multiply(MultiplicativeExp_Multiply, Object)"); }

        Object? visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder n, [Object? o]){ return  unimplementedVisitor("visitMultiplicativeExp_Remainder(MultiplicativeExp_Remainder, Object)"); }

        Object? visitAdditiveExp_Plus(AdditiveExp_Plus n, [Object? o]){ return  unimplementedVisitor("visitAdditiveExp_Plus(AdditiveExp_Plus, Object)"); }

        Object? visitAdditiveExp_Minus(AdditiveExp_Minus n, [Object? o]){ return  unimplementedVisitor("visitAdditiveExp_Minus(AdditiveExp_Minus, Object)"); }

        Object? visitShiftExp_Left(ShiftExp_Left n, [Object? o]){ return  unimplementedVisitor("visitShiftExp_Left(ShiftExp_Left, Object)"); }

        Object? visitShiftExp_Right(ShiftExp_Right n, [Object? o]){ return  unimplementedVisitor("visitShiftExp_Right(ShiftExp_Right, Object)"); }

        Object? visitRelationalExp_Less(RelationalExp_Less n, [Object? o]){ return  unimplementedVisitor("visitRelationalExp_Less(RelationalExp_Less, Object)"); }

        Object? visitRelationalExp_Greater(RelationalExp_Greater n, [Object? o]){ return  unimplementedVisitor("visitRelationalExp_Greater(RelationalExp_Greater, Object)"); }

        Object? visitRelationalExp_LessEqual(RelationalExp_LessEqual n, [Object? o]){ return  unimplementedVisitor("visitRelationalExp_LessEqual(RelationalExp_LessEqual, Object)"); }

        Object? visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual n, [Object? o]){ return  unimplementedVisitor("visitRelationalExp_GreaterEqual(RelationalExp_GreaterEqual, Object)"); }

        Object? visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual n, [Object? o]){ return  unimplementedVisitor("visitEqualityExpr_EqualEqual(EqualityExpr_EqualEqual, Object)"); }

        Object? visitEqualityExpr_NotEqual(EqualityExpr_NotEqual n, [Object? o]){ return  unimplementedVisitor("visitEqualityExpr_NotEqual(EqualityExpr_NotEqual, Object)"); }

        Object? visitAndExpression(AndExpression n, [Object? o]){ return  unimplementedVisitor("visitAndExpression(AndExpression, Object)"); }

        Object? visitExclusiveOrExpression(ExclusiveOrExpression n, [Object? o]){ return  unimplementedVisitor("visitExclusiveOrExpression(ExclusiveOrExpression, Object)"); }

        Object? visitInclusiveOrExpression(InclusiveOrExpression n, [Object? o]){ return  unimplementedVisitor("visitInclusiveOrExpression(InclusiveOrExpression, Object)"); }

        Object? visitConditionalAndExpression(ConditionalAndExpression n, [Object? o]){ return  unimplementedVisitor("visitConditionalAndExpression(ConditionalAndExpression, Object)"); }

        Object? visitConditionalOrExpression(ConditionalOrExpression n, [Object? o]){ return  unimplementedVisitor("visitConditionalOrExpression(ConditionalOrExpression, Object)"); }

        Object? visitExpressionStmt(ExpressionStmt n, [Object? o]){ return  unimplementedVisitor("visitExpressionStmt(ExpressionStmt, Object)"); }

        Object? visitVariableAndSW(VariableAndSW n, [Object? o]){ return  unimplementedVisitor("visitVariableAndSW(VariableAndSW, Object)"); }

        Object? visitExpressionList(ExpressionList n, [Object? o]){ return  unimplementedVisitor("visitExpressionList(ExpressionList, Object)"); }

        Object? visitCallOpt(CallOpt n, [Object? o]){ return  unimplementedVisitor("visitCallOpt(CallOpt, Object)"); }

        Object? visitFunctionCall(FunctionCall n, [Object? o]){ return  unimplementedVisitor("visitFunctionCall(FunctionCall, Object)"); }

        Object? visitExitForStatement(ExitForStatement n, [Object? o]){ return  unimplementedVisitor("visitExitForStatement(ExitForStatement, Object)"); }

        Object? visitExitHforStatement(ExitHforStatement n, [Object? o]){ return  unimplementedVisitor("visitExitHforStatement(ExitHforStatement, Object)"); }

        Object? visitLoadOption_load_script(LoadOption_load_script n, [Object? o]){ return  unimplementedVisitor("visitLoadOption_load_script(LoadOption_load_script, Object)"); }

        Object? visitLoadOption_loadprofile(LoadOption_loadprofile n, [Object? o]){ return  unimplementedVisitor("visitLoadOption_loadprofile(LoadOption_loadprofile, Object)"); }

        Object? visitLoadOption_run_script(LoadOption_run_script n, [Object? o]){ return  unimplementedVisitor("visitLoadOption_run_script(LoadOption_run_script, Object)"); }

        Object? visitLoadScriptStmt(LoadScriptStmt n, [Object? o]){ return  unimplementedVisitor("visitLoadScriptStmt(LoadScriptStmt, Object)"); }

        Object? visitSimpleOption_timer_begin(SimpleOption_timer_begin n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_timer_begin(SimpleOption_timer_begin, Object)"); }

        Object? visitSimpleOption_timer_end(SimpleOption_timer_end n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_timer_end(SimpleOption_timer_end, Object)"); }

        Object? visitSimpleOption_pause(SimpleOption_pause n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_pause(SimpleOption_pause, Object)"); }

        Object? visitSimpleOption_file(SimpleOption_file n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_file(SimpleOption_file, Object)"); }

        Object? visitSimpleOption_line(SimpleOption_line n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_line(SimpleOption_line, Object)"); }

        Object? visitSimpleOption_clear_fifo(SimpleOption_clear_fifo n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_clear_fifo(SimpleOption_clear_fifo, Object)"); }

        Object? visitSimpleOption_beep(SimpleOption_beep n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_beep(SimpleOption_beep, Object)"); }

        Object? visitSimpleOption_eject(SimpleOption_eject n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_eject(SimpleOption_eject, Object)"); }

        Object? visitSimpleOption_insert(SimpleOption_insert n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_insert(SimpleOption_insert, Object)"); }

        Object? visitSimpleOption_split(SimpleOption_split n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_split(SimpleOption_split, Object)"); }

        Object? visitSimpleOption_end(SimpleOption_end n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_end(SimpleOption_end, Object)"); }

        Object? visitSimpleOption_clear(SimpleOption_clear n, [Object? o]){ return  unimplementedVisitor("visitSimpleOption_clear(SimpleOption_clear, Object)"); }

        Object? visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt n, [Object? o]){ return  unimplementedVisitor("visitKeyWordWithoutParameterStmt(KeyWordWithoutParameterStmt, Object)"); }

        Object? visitSleepStmt(SleepStmt n, [Object? o]){ return  unimplementedVisitor("visitSleepStmt(SleepStmt, Object)"); }

        Object? visitSetStmt_Identifier(SetStmt_Identifier n, [Object? o]){ return  unimplementedVisitor("visitSetStmt_Identifier(SetStmt_Identifier, Object)"); }

        Object? visitSetStmt_MacroName(SetStmt_MacroName n, [Object? o]){ return  unimplementedVisitor("visitSetStmt_MacroName(SetStmt_MacroName, Object)"); }

        Object? visitPrintStmt_Message(PrintStmt_Message n, [Object? o]){ return  unimplementedVisitor("visitPrintStmt_Message(PrintStmt_Message, Object)"); }

        Object? visitPrintStmt_Quqstion(PrintStmt_Quqstion n, [Object? o]){ return  unimplementedVisitor("visitPrintStmt_Quqstion(PrintStmt_Quqstion, Object)"); }

        Object? visitOnOffOption_on(OnOffOption_on n, [Object? o]){ return  unimplementedVisitor("visitOnOffOption_on(OnOffOption_on, Object)"); }

        Object? visitOnOffOption_off(OnOffOption_off n, [Object? o]){ return  unimplementedVisitor("visitOnOffOption_off(OnOffOption_off, Object)"); }

        Object? visitAutoResponseStmt(AutoResponseStmt n, [Object? o]){ return  unimplementedVisitor("visitAutoResponseStmt(AutoResponseStmt, Object)"); }

        Object? visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier n, [Object? o]){ return  unimplementedVisitor("visitWriteFifoStmt_Identifier(WriteFifoStmt_Identifier, Object)"); }

        Object? visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName n, [Object? o]){ return  unimplementedVisitor("visitWriteFifoStmt_MacroName(WriteFifoStmt_MacroName, Object)"); }

        Object? visitUploadStmt_upload(UploadStmt_upload n, [Object? o]){ return  unimplementedVisitor("visitUploadStmt_upload(UploadStmt_upload, Object)"); }

        Object? visitUploadStmt_upload2(UploadStmt_upload2 n, [Object? o]){ return  unimplementedVisitor("visitUploadStmt_upload2(UploadStmt_upload2, Object)"); }

        Object? visitResetStmt_reset(ResetStmt_reset n, [Object? o]){ return  unimplementedVisitor("visitResetStmt_reset(ResetStmt_reset, Object)"); }

        Object? visitResetStmt_reset2(ResetStmt_reset2 n, [Object? o]){ return  unimplementedVisitor("visitResetStmt_reset2(ResetStmt_reset2, Object)"); }

        Object? visitResetStmt_reset_cold(ResetStmt_reset_cold n, [Object? o]){ return  unimplementedVisitor("visitResetStmt_reset_cold(ResetStmt_reset_cold, Object)"); }

        Object? visitResetStmt_reset2_cold(ResetStmt_reset2_cold n, [Object? o]){ return  unimplementedVisitor("visitResetStmt_reset2_cold(ResetStmt_reset2_cold, Object)"); }

        Object? visitInstallParameterList(InstallParameterList n, [Object? o]){ return  unimplementedVisitor("visitInstallParameterList(InstallParameterList, Object)"); }

        Object? visitInstallStmt_install(InstallStmt_install n, [Object? o]){ return  unimplementedVisitor("visitInstallStmt_install(InstallStmt_install, Object)"); }

        Object? visitInstallStmt_install_2(InstallStmt_install_2 n, [Object? o]){ return  unimplementedVisitor("visitInstallStmt_install_2(InstallStmt_install_2, Object)"); }

        Object? visitParameterItem(ParameterItem n, [Object? o]){ return  unimplementedVisitor("visitParameterItem(ParameterItem, Object)"); }

        Object? visitParameterItemList(ParameterItemList n, [Object? o]){ return  unimplementedVisitor("visitParameterItemList(ParameterItemList, Object)"); }

        Object? visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth n, [Object? o]){ return  unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth(JcopAuthStmt_jcop22_ext_auth, Object)"); }

        Object? visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc n, [Object? o]){ return  unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_kmc(JcopAuthStmt_jcop22_ext_auth_kmc, Object)"); }

        Object? visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2 n, [Object? o]){ return  unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_2(JcopAuthStmt_jcop22_ext_auth_2, Object)"); }

        Object? visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2 n, [Object? o]){ return  unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_kmc_2(JcopAuthStmt_jcop22_ext_auth_kmc_2, Object)"); }

        Object? visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock n, [Object? o]){ return  unimplementedVisitor("visitJcopAuthStmt_jcop22_ext_auth_nonblock(JcopAuthStmt_jcop22_ext_auth_nonblock, Object)"); }

        Object? visitSelectStmt_select(SelectStmt_select n, [Object? o]){ return  unimplementedVisitor("visitSelectStmt_select(SelectStmt_select, Object)"); }

        Object? visitSelectStmt_select_2(SelectStmt_select_2 n, [Object? o]){ return  unimplementedVisitor("visitSelectStmt_select_2(SelectStmt_select_2, Object)"); }

        Object? visitDeleteStmt_delete(DeleteStmt_delete n, [Object? o]){ return  unimplementedVisitor("visitDeleteStmt_delete(DeleteStmt_delete, Object)"); }

        Object? visitDeleteStmt_delete_2(DeleteStmt_delete_2 n, [Object? o]){ return  unimplementedVisitor("visitDeleteStmt_delete_2(DeleteStmt_delete_2, Object)"); }

        Object? visitApdu2Stmt(Apdu2Stmt n, [Object? o]){ return  unimplementedVisitor("visitApdu2Stmt(Apdu2Stmt, Object)"); }

        Object? visitPromptStmt(PromptStmt n, [Object? o]){ return  unimplementedVisitor("visitPromptStmt(PromptStmt, Object)"); }

        Object? visitShowapduStmt(ShowapduStmt n, [Object? o]){ return  unimplementedVisitor("visitShowapduStmt(ShowapduStmt, Object)"); }

        Object? visitDes_3des_mac_call(Des_3des_mac_call n, [Object? o]){ return  unimplementedVisitor("visitDes_3des_mac_call(Des_3des_mac_call, Object)"); }

        Object? visitDes_3des_mac_Stmt(Des_3des_mac_Stmt n, [Object? o]){ return  unimplementedVisitor("visitDes_3des_mac_Stmt(Des_3des_mac_Stmt, Object)"); }

        Object? visitFull_3des_mac_call(Full_3des_mac_call n, [Object? o]){ return  unimplementedVisitor("visitFull_3des_mac_call(Full_3des_mac_call, Object)"); }

        Object? visitFull_3des_mac_Stmt(Full_3des_mac_Stmt n, [Object? o]){ return  unimplementedVisitor("visitFull_3des_mac_Stmt(Full_3des_mac_Stmt, Object)"); }

        Object? visitMac_auto_mac_option(Mac_auto_mac_option n, [Object? o]){ return  unimplementedVisitor("visitMac_auto_mac_option(Mac_auto_mac_option, Object)"); }

        Object? visitMac_auto_mac_option2(Mac_auto_mac_option2 n, [Object? o]){ return  unimplementedVisitor("visitMac_auto_mac_option2(Mac_auto_mac_option2, Object)"); }

        Object? visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt n, [Object? o]){ return  unimplementedVisitor("visitMac_auto_mac_Stmt(Mac_auto_mac_Stmt, Object)"); }

        Object? visitLineEndOpt(LineEndOpt n, [Object? o]){ return  unimplementedVisitor("visitLineEndOpt(LineEndOpt, Object)"); }

        Object? visitSuperlongStmtInOneLine(SuperlongStmtInOneLine n, [Object? o]){ return  unimplementedVisitor("visitSuperlongStmtInOneLine(SuperlongStmtInOneLine, Object)"); }

        Object? visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines n, [Object? o]){ return  unimplementedVisitor("visitSuperlongStmtInMutipleLines(SuperlongStmtInMutipleLines, Object)"); }

        Object? visitCompareStmt(CompareStmt n, [Object? o]){ return  unimplementedVisitor("visitCompareStmt(CompareStmt, Object)"); }

        Object? visitSocket_messageStmt(Socket_messageStmt n, [Object? o]){ return  unimplementedVisitor("visitSocket_messageStmt(Socket_messageStmt, Object)"); }

        Object? visitGenerateStmt(GenerateStmt n, [Object? o]){ return  unimplementedVisitor("visitGenerateStmt(GenerateStmt, Object)"); }

        Object? visitSendtextStmt(SendtextStmt n, [Object? o]){ return  unimplementedVisitor("visitSendtextStmt(SendtextStmt, Object)"); }

        Object? visitPushStmt(PushStmt n, [Object? o]){ return  unimplementedVisitor("visitPushStmt(PushStmt, Object)"); }

        Object? visitGotoStmt(GotoStmt n, [Object? o]){ return  unimplementedVisitor("visitGotoStmt(GotoStmt, Object)"); }

        Object? visitEmptyStatement0(EmptyStatement0 n, [Object? o]){ return  unimplementedVisitor("visitEmptyStatement0(EmptyStatement0, Object)"); }

        Object? visitEmptyStatement1(EmptyStatement1 n, [Object? o]){ return  unimplementedVisitor("visitEmptyStatement1(EmptyStatement1, Object)"); }


        Object? visit(ASTNode n, [Object? o])
        {
            if (n is ASTNodeToken) return visitASTNodeToken(n, o);
            else if (n is SnooperProg) return visitSnooperProg(n, o);
            else if (n is SnooperSegmentItemList) return visitSnooperSegmentItemList(n, o);
            else if (n is ReturnStmt) return visitReturnStmt(n, o);
            else if (n is SimpleName) return visitSimpleName(n, o);
            else if (n is SimpleNameList) return visitSimpleNameList(n, o);
            else if (n is CallSignature) return visitCallSignature(n, o);
            else if (n is FunctionDecl) return visitFunctionDecl(n, o);
            else if (n is StatementList_StatementList) return visitStatementList_StatementList(n, o);
            else if (n is StatementList) return visitStatementList(n, o);
            else if (n is IfSeg) return visitIfSeg(n, o);
            else if (n is IfThenStatement) return visitIfThenStatement(n, o);
            else if (n is ElseSeg) return visitElseSeg(n, o);
            else if (n is IfThenElseStatement) return visitIfThenElseStatement(n, o);
            else if (n is ElseIfStatementItemList) return visitElseIfStatementItemList(n, o);
            else if (n is ElseIfStatementItem) return visitElseIfStatementItem(n, o);
            else if (n is Variable) return visitVariable(n, o);
            else if (n is BadVariable) return visitBadVariable(n, o);
            else if (n is LetOpt) return visitLetOpt(n, o);
            else if (n is VariableStmt) return visitVariableStmt(n, o);
            else if (n is PrimaryAssignmentStmt) return visitPrimaryAssignmentStmt(n, o);
            else if (n is ArrayAccesOnLeftSide) return visitArrayAccesOnLeftSide(n, o);
            else if (n is ArrayAccessAssignmentStmt) return visitArrayAccessAssignmentStmt(n, o);
            else if (n is KeywordAssignmentStmt) return visitKeywordAssignmentStmt(n, o);
            else if (n is BadAssignment) return visitBadAssignment(n, o);
            else if (n is DoLoopStmt) return visitDoLoopStmt(n, o);
            else if (n is StepStmOpt) return visitStepStmOpt(n, o);
            else if (n is ForStmt) return visitForStmt(n, o);
            else if (n is NextSeg) return visitNextSeg(n, o);
            else if (n is HforStmt) return visitHforStmt(n, o);
            else if (n is HnexSeg) return visitHnexSeg(n, o);
            else if (n is NumberLiteral) return visitNumberLiteral(n, o);
            else if (n is StringLiteral) return visitStringLiteral(n, o);
            else if (n is ArrayAccess) return visitArrayAccess(n, o);
            else if (n is HexMacroPrimary) return visitHexMacroPrimary(n, o);
            else if (n is ApduDataWith3Lc) return visitApduDataWith3Lc(n, o);
            else if (n is ApduDataWith2Lc) return visitApduDataWith2Lc(n, o);
            else if (n is ApduDataWith4Lc) return visitApduDataWith4Lc(n, o);
            else if (n is ApduDataWithoutLc) return visitApduDataWithoutLc(n, o);
            else if (n is ApduDataList) return visitApduDataList(n, o);
            else if (n is PostIncrementExpression) return visitPostIncrementExpression(n, o);
            else if (n is PostDecrementExpression) return visitPostDecrementExpression(n, o);
            else if (n is PreIncrementExpression) return visitPreIncrementExpression(n, o);
            else if (n is PreDecrementExpression) return visitPreDecrementExpression(n, o);
            else if (n is UnaryExpNotPlusMinus_Xor) return visitUnaryExpNotPlusMinus_Xor(n, o);
            else if (n is UnaryExpNotPlusMinus_Not) return visitUnaryExpNotPlusMinus_Not(n, o);
            else if (n is MultiplicativeExp_Divide) return visitMultiplicativeExp_Divide(n, o);
            else if (n is MultiplicativeExp_Multiply) return visitMultiplicativeExp_Multiply(n, o);
            else if (n is MultiplicativeExp_Remainder) return visitMultiplicativeExp_Remainder(n, o);
            else if (n is AdditiveExp_Plus) return visitAdditiveExp_Plus(n, o);
            else if (n is AdditiveExp_Minus) return visitAdditiveExp_Minus(n, o);
            else if (n is ShiftExp_Left) return visitShiftExp_Left(n, o);
            else if (n is ShiftExp_Right) return visitShiftExp_Right(n, o);
            else if (n is RelationalExp_Less) return visitRelationalExp_Less(n, o);
            else if (n is RelationalExp_Greater) return visitRelationalExp_Greater(n, o);
            else if (n is RelationalExp_LessEqual) return visitRelationalExp_LessEqual(n, o);
            else if (n is RelationalExp_GreaterEqual) return visitRelationalExp_GreaterEqual(n, o);
            else if (n is EqualityExpr_EqualEqual) return visitEqualityExpr_EqualEqual(n, o);
            else if (n is EqualityExpr_NotEqual) return visitEqualityExpr_NotEqual(n, o);
            else if (n is AndExpression) return visitAndExpression(n, o);
            else if (n is ExclusiveOrExpression) return visitExclusiveOrExpression(n, o);
            else if (n is InclusiveOrExpression) return visitInclusiveOrExpression(n, o);
            else if (n is ConditionalAndExpression) return visitConditionalAndExpression(n, o);
            else if (n is ConditionalOrExpression) return visitConditionalOrExpression(n, o);
            else if (n is ExpressionStmt) return visitExpressionStmt(n, o);
            else if (n is VariableAndSW) return visitVariableAndSW(n, o);
            else if (n is ExpressionList) return visitExpressionList(n, o);
            else if (n is CallOpt) return visitCallOpt(n, o);
            else if (n is FunctionCall) return visitFunctionCall(n, o);
            else if (n is ExitForStatement) return visitExitForStatement(n, o);
            else if (n is ExitHforStatement) return visitExitHforStatement(n, o);
            else if (n is LoadOption_load_script) return visitLoadOption_load_script(n, o);
            else if (n is LoadOption_loadprofile) return visitLoadOption_loadprofile(n, o);
            else if (n is LoadOption_run_script) return visitLoadOption_run_script(n, o);
            else if (n is LoadScriptStmt) return visitLoadScriptStmt(n, o);
            else if (n is SimpleOption_timer_begin) return visitSimpleOption_timer_begin(n, o);
            else if (n is SimpleOption_timer_end) return visitSimpleOption_timer_end(n, o);
            else if (n is SimpleOption_pause) return visitSimpleOption_pause(n, o);
            else if (n is SimpleOption_file) return visitSimpleOption_file(n, o);
            else if (n is SimpleOption_line) return visitSimpleOption_line(n, o);
            else if (n is SimpleOption_clear_fifo) return visitSimpleOption_clear_fifo(n, o);
            else if (n is SimpleOption_beep) return visitSimpleOption_beep(n, o);
            else if (n is SimpleOption_eject) return visitSimpleOption_eject(n, o);
            else if (n is SimpleOption_insert) return visitSimpleOption_insert(n, o);
            else if (n is SimpleOption_split) return visitSimpleOption_split(n, o);
            else if (n is SimpleOption_end) return visitSimpleOption_end(n, o);
            else if (n is SimpleOption_clear) return visitSimpleOption_clear(n, o);
            else if (n is KeyWordWithoutParameterStmt) return visitKeyWordWithoutParameterStmt(n, o);
            else if (n is SleepStmt) return visitSleepStmt(n, o);
            else if (n is SetStmt_Identifier) return visitSetStmt_Identifier(n, o);
            else if (n is SetStmt_MacroName) return visitSetStmt_MacroName(n, o);
            else if (n is PrintStmt_Message) return visitPrintStmt_Message(n, o);
            else if (n is PrintStmt_Quqstion) return visitPrintStmt_Quqstion(n, o);
            else if (n is OnOffOption_on) return visitOnOffOption_on(n, o);
            else if (n is OnOffOption_off) return visitOnOffOption_off(n, o);
            else if (n is AutoResponseStmt) return visitAutoResponseStmt(n, o);
            else if (n is WriteFifoStmt_Identifier) return visitWriteFifoStmt_Identifier(n, o);
            else if (n is WriteFifoStmt_MacroName) return visitWriteFifoStmt_MacroName(n, o);
            else if (n is UploadStmt_upload) return visitUploadStmt_upload(n, o);
            else if (n is UploadStmt_upload2) return visitUploadStmt_upload2(n, o);
            else if (n is ResetStmt_reset) return visitResetStmt_reset(n, o);
            else if (n is ResetStmt_reset2) return visitResetStmt_reset2(n, o);
            else if (n is ResetStmt_reset_cold) return visitResetStmt_reset_cold(n, o);
            else if (n is ResetStmt_reset2_cold) return visitResetStmt_reset2_cold(n, o);
            else if (n is InstallParameterList) return visitInstallParameterList(n, o);
            else if (n is InstallStmt_install) return visitInstallStmt_install(n, o);
            else if (n is InstallStmt_install_2) return visitInstallStmt_install_2(n, o);
            else if (n is ParameterItem) return visitParameterItem(n, o);
            else if (n is ParameterItemList) return visitParameterItemList(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth) return visitJcopAuthStmt_jcop22_ext_auth(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_kmc) return visitJcopAuthStmt_jcop22_ext_auth_kmc(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_2) return visitJcopAuthStmt_jcop22_ext_auth_2(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_kmc_2) return visitJcopAuthStmt_jcop22_ext_auth_kmc_2(n, o);
            else if (n is JcopAuthStmt_jcop22_ext_auth_nonblock) return visitJcopAuthStmt_jcop22_ext_auth_nonblock(n, o);
            else if (n is SelectStmt_select) return visitSelectStmt_select(n, o);
            else if (n is SelectStmt_select_2) return visitSelectStmt_select_2(n, o);
            else if (n is DeleteStmt_delete) return visitDeleteStmt_delete(n, o);
            else if (n is DeleteStmt_delete_2) return visitDeleteStmt_delete_2(n, o);
            else if (n is Apdu2Stmt) return visitApdu2Stmt(n, o);
            else if (n is PromptStmt) return visitPromptStmt(n, o);
            else if (n is ShowapduStmt) return visitShowapduStmt(n, o);
            else if (n is Des_3des_mac_call) return visitDes_3des_mac_call(n, o);
            else if (n is Des_3des_mac_Stmt) return visitDes_3des_mac_Stmt(n, o);
            else if (n is Full_3des_mac_call) return visitFull_3des_mac_call(n, o);
            else if (n is Full_3des_mac_Stmt) return visitFull_3des_mac_Stmt(n, o);
            else if (n is Mac_auto_mac_option) return visitMac_auto_mac_option(n, o);
            else if (n is Mac_auto_mac_option2) return visitMac_auto_mac_option2(n, o);
            else if (n is Mac_auto_mac_Stmt) return visitMac_auto_mac_Stmt(n, o);
            else if (n is LineEndOpt) return visitLineEndOpt(n, o);
            else if (n is SuperlongStmtInOneLine) return visitSuperlongStmtInOneLine(n, o);
            else if (n is SuperlongStmtInMutipleLines) return visitSuperlongStmtInMutipleLines(n, o);
            else if (n is CompareStmt) return visitCompareStmt(n, o);
            else if (n is Socket_messageStmt) return visitSocket_messageStmt(n, o);
            else if (n is GenerateStmt) return visitGenerateStmt(n, o);
            else if (n is SendtextStmt) return visitSendtextStmt(n, o);
            else if (n is PushStmt) return visitPushStmt(n, o);
            else if (n is GotoStmt) return visitGotoStmt(n, o);
            else if (n is EmptyStatement0) return visitEmptyStatement0(n, o);
            else if (n is EmptyStatement1) return visitEmptyStatement1(n, o);
            else throw  ArgumentError("visit(" + n.toString() + ")");
        }
    }

